繁体   English   中英

ASP.NET Web Api配置不执行消息处理程序的特定路由

[英]ASP.NET Web Api configuring a specific route not executing message handler

我正在尝试配置一条特定的路由,以便在它击中控制器之前执行消息处理程序,但是该消息处理程序从未执行过。

我有以下控制器:

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。 是否可以使用像“ private / users”这样的硬编码routeTemplate而不是默认的“ {controller} / {id}”格式来实现特定于路由的配置?

我想做的是让我的TokenValidationHandler触发所有我的私有api调用,并让公共api调用绕过TokenValidationHandler。

属性路由匹配基于约定的路由。 所涉及的动作带有Route属性标记。 如果启用了属性路由,则意味着它不会到达基于约定的路由,因此不会调用处理程序。

删除路线属性

public class TestController : ApiController { 
    public IHttpActionResult Get() {
        return Ok();
    }
}

路由注册的顺序对于基于约定的路由也起作用,因此请确保在更特定的路由之后注册常规路由

config.Routes.MapHttpRoute(
    name: "PrivateApi",
    routeTemplate: "private/users",
    defaults: new { id = RouteParameter.Optional },
    constraints: null,
    handler: new TokenValidationHandler() { InnerHandler = new HttpControllerDispatcher(config) }
);

//more general route
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional },
    //...
);

否则,如果您首选属性路由,则可以考虑使用操作过滤器

根据明确的意图,您最好在ASP.NET Web API 2中使用身份验证筛选器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM