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