c# - Web API 自定义过滤器未触发

标签 c# asp.net-web-api2

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

自定义过滤器类

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

这是我如何装饰我的 Controller 方法

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

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

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

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

您的操作过滤器正在运行。您能否确保使用 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 操作过滤器,您可能需要查看 Basic Authentication using DelegatingHandler我在 SO 中回答了。

关于c# - Web API 自定义过滤器未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42845160/

相关文章:

c# - .Net Standard 2的96多个程序集复制到Console(.Net framework)Application的bin文件夹下

c# - 通过 Web API 2 将 ASP.NET 身份(用户管理)添加到 OData

c# - 使用 AllowAnonymous 属性在 Web Api 中进行身份验证

c# - 发布 Web API 2 应用程序后出现 HTTP 405 错误

c# - Restsharp.RestRequest.RemoveJsonBody() 方法

javascript - 用户定义的控件,具有动态更新的年份列表

c# - 编写高度用户可扩展的 C# 应用程序的最佳实践

c# - 在哪里实现 try catch block ?

c# - 在 .NET 4.0 中,如何 'sandbox' 一个内存程序集并执行一个方法?

javascript - Web Api 2 登录和注册操作、JavaScript 问题