Skip to main content
 首页 » 编程设计

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

2024年02月05日30java哥

我已经创建了一个自定义过滤器属性,它将执行一些基本的 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 中回答了。