C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证

2019-12-26 18:42:29王振洲

3.2、在具体的Api接口增加我们上面自定义类的特性


[RequestAuthorize]
  public class ChargingController : ApiController
  {
    /// <summary>
    /// 得到所有数据
    /// </summary>
    /// <returns>返回数据</returns>
    [HttpGet]
    public string GetAllChargingData()
    {
      return "Success";
    }

    /// <summary>
    /// 得到当前Id的所有数据
    /// </summary>
    /// <param name="id">参数Id</param>
    /// <returns>返回数据</returns>
    [HttpGet]
    public string GetAllChargingData(string id)
    {
      return "ChargingData" + id;
    }

  }

增加了特性标注之后,每次请求这个API里面的接口之前,程序会先进入到我们override过的 OnAuthorization() 方法里面,验证通过之后,才会进到相应的方法里面去执行,否则返回401。

四、优化
 通过上面的几步,基本就能达到我们想要的身份认证的效果,但是总是感觉不太方便,主要不太方便的点有以下几个。

1.每次新建一个API,对应的接口上面都要标注 [RequestAuthorize] 这个一个东西,感觉好麻烦。
2.每次发送ajax请求,都要在beforeSend事件里面加 XHR.setRequestHeader('Authorization', 'BasicAuth ' + Ticket); 这个,感觉也麻烦。
关于以上两点,我们优化下

1、解决API的问题
在API里面加一个公共的父类,在父类上面标注 [RequestAuthorize] 即可。


namespace WebApiCORS.Controllers
{
  [RequestAuthorize]
  [EnableCors(origins: "*", headers: "*", methods: "*")]
  public class BaseApiController : ApiController
  {
  }
}

namespace WebApiCORS.Controllers
{
  public class ChargingController : BaseApiController
  {
    /// <summary>
    /// 得到所有数据
    /// </summary>
    /// <returns>返回数据</returns>
    [HttpGet]
    public string GetAllChargingData()
    {
      return "Success";
    }

    /// <summary>
    /// 得到当前Id的所有数据
    /// </summary>
    /// <param name="id">参数Id</param>
    /// <returns>返回数据</returns>
    [HttpGet]
    public string GetAllChargingData(string id)
    {
      return "ChargingData" + id;
    }
  }
}

 注意:我们登录的请求是不需要验证的,因为登录的时候还没有产生票据,所以登录的API不能够继承 BaseApiController

2、解决ajax的问题