要实现的功能是在接收到用户请求时,请求头(headers)中需要包含token,并且token的值等于123456才算效验通过,可以调用接口,否则提示401(未通过身份认证)。
第一步:自定义一个过滤器,实现接口IAuthorizationFilter
public class MyAuthorFilter : IAuthorizationFilter
{
public bool AllowMultiple => throw new NotImplementedException();
public async Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
{
IEnumerable<string> tokens;
if (!actionContext.Request.Headers.TryGetValues("token", out tokens))
{
return new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
string token = tokens.First();
if (token == "123456")
{
return await continuation();
}
else
{
return new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
}
}
第二步:在WebApiConfig.cs配置文件中把新加的过滤器注册一下
//注册全局Filter
config.Filters.Add(new MyAuthorFilter());
前端代码如下:
这时候刷新前端页面,可以看到后台服务已经进入,先执行了MyAuthorFilter中的代码,当效验通过时再执行控制器中的代码。实现了身份认证功能。
程序执行过程如下:
上面是程序验证通过的情况,下面再看下如果token中的值不是123456的情况:
如果token的值为abc,那么程序就会返回401的异常,控制器中的方法不会执行。