Web API自定义筛选器未触发

时间:2017-03-16 21:32:49

标签: c# asp.net-web-api2

我创建了一个自定义过滤器属性,它将进行一些基本的令牌验证。所以我开始只是添加几行来查看它是否正常工作,但由于某种原因它无法正常工作。

自定义过滤器类

730

我在 WebApi.config

中注册了它
/// <summary>
/// Basic Token Based Authitication 
/// </summary>
public class BasicTokenValidation : ActionFilterAttribute
{
    /// <summary>
    /// Validate Token
    /// </summary>
    /// <param name="actionContext"></param>
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        HttpContext.Current.Response.Write(" filter1 ");
        Debug.WriteLine("Executing My Filter!");
        if (actionContext.Request.Headers.Authorization == null)
        {
            actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
        }
        else {
            string authToken = actionContext.Request.Headers.Authorization.Parameter;
        }

        base.OnActionExecuting(actionContext);
    }
}

以下是我如何修饰Controller方法

config.Filters.Add(new BasicTokenValidation());

不确定我是否需要配置其他内容。阅读了一些文章和文章,有些我确实拥有创建自定义过滤器所需的一切。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:3)

您的操作过滤器正在运行。您能否确保使用WebAPI程序集System.Web.Http.Filters而不是MVC程序集System.Web.Http.Mvc

using System.Diagnostics;
using System.Web;
using System.Web.Http.Controllers; 
using System.Web.Http.Filters; <--- WebAPI assembly 

namespace YOURNAMESPACE
{
    public class BasicTokenValidation : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            HttpContext.Current.Response.Write(" filter1 ");
            Debug.WriteLine("Executing My Filter!");
            if (actionContext.Request.Headers.Authorization == null)
            {
                actionContext.Response = 
                    new System.Net.Http.HttpResponseMessage(
                         System.Net.HttpStatusCode.Unauthorized);
            }
            else
            {
                string authToken = actionContext.Request.Headers.Authorization.Parameter;
            }

            base.OnActionExecuting(actionContext);
        }
    }
}

由于您全局注册了BasicTokenValidation操作过滤器 ,您可能需要查看我在SO中回答的Basic Authentication using DelegatingHandler