我想配置一个特定的路由来执行消息处理程序,然后它击中控制器,但消息处理程序永远不会执行。ASP.NET Web Api配置特定的路由不执行消息处理程序
我有以下控制器:
public class TestController : ApiController
{
[Route("private/users")]
public IHttpActionResult Get()
{
return Ok();
}
}
而下面的路由配置:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "private/users",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: new TokenValidationHandler() { InnerHandler = new HttpControllerDispatcher(config) }
);
而且MessageHandler的是这样的:
public class TokenValidationHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//some logic to validate token
return base.SendAsync(request, cancellationToken);
}
}
永远不会执行该TokenValidationHandler这似乎是因为配置路由时的routeTemplate。是否可以使用硬编码的routeTemplate(如“private/users”而不是默认的“{controller}/{id}”格式)实现路由特定配置?
我想要做的就是让我的TokenValidationHandler为我所有的私人api调用启动,并让公共API调用绕过TokenValidationHandler。
感谢您的答复会更好。我已经在我的应用程序中使用了属性路由。这是否意味着我必须使用动作过滤器来实现我需要的基于路线的配置? – shane87
@ shane87,是的。考虑使用认证过滤器。 – Nkosi