WebApi自定义Filter实例

要实现的功能是在接收到用户请求时,请求头(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的异常,控制器中的方法不会执行。 

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/109214091
今日推荐