【问题标题】:Web API Custom Filter not firingWeb API 自定义过滤器未触发
【发布时间】:2017-03-17 06:22:11
【问题描述】:

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

自定义过滤器类

/// <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);
    }
}

我在 WebApi.config

中注册了它
config.Filters.Add(new BasicTokenValidation());

这是我如何装饰我的控制器方法

[HttpGet]
[Route("get/all")]
[BasicTokenValidation]
public IHttpActionResult GetAll()
{
    try
    {

        // Some Code
    }
    catch (Exception ex)
    {
        return InternalServerError(ex);
    }
}

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

我们将不胜感激。

谢谢

【问题讨论】:

  • 你能显示 BasicTokenValidation 类吗?
  • 请看编辑,添加类

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


【解决方案1】:

您的操作过滤器正在工作。您能否确保使用 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

【讨论】:

  • 我正在为过滤器使用 WebAPI 程序集。是我检查的第一件事。好的,如果我不希望全局使用它,我需要从 WebApi.config 中删除它,只装饰我想要过滤的方法或控制器?
  • 是的,正确的。如果您不需要,您不必全局注册操作过滤器。
  • 谢谢我让它工作正常。我查看了您的 SO 答案,并将查看如何使用我正在忙于构建的结构来实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2015-03-14
  • 2016-12-11
  • 2015-11-19
  • 2015-02-27
  • 1970-01-01
  • 2011-08-06
相关资源
最近更新 更多