我可以将MessageHandler应用于某些属性路由吗?

时间:2014-04-24 20:22:03

标签: authorization asp.net-web-api-routing jwt

我知道您可以使用基于约定的路由分配处理程序,例如:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var tokenHandler = new TokenValidationHandler()
        {
            InnerHandler = new TokenValidationHandler()
            {
                InnerHandler = new HttpControllerDispatcher(config)
            }
        };

        config.Routes.MapHttpRoute(
            name: "someApi",
            routeTemplate: "v1/{controller}/{id}",
            defaults: new object { id = RouteParameter.Optional },
            constraints: null,
            handler: tokenHandler
            );
    }
}

是否可以使用属性路由来执行此操作?我正在尝试做的是限制一些带有承载令牌的路由,但允许其他路由允许匿名访问。我应该使用过滤吗?

1 个答案:

答案 0 :(得分:0)

我也对此感兴趣,我想要一个全局消息处理程序,它不适用于某些请求类型或路由到特定控制器(类似于stonetip)。

目前我只是绕过我的处理程序中的所有逻辑,如果请求属于该类型或该控制器,但我不认为这是最有效的方法:

public class MyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (request.Method != HttpMethod.Get) 
        {
            System.Web.Http.Routing.IHttpRouteData routeInfo = request.GetRequestContext().RouteData;
            object objController = routeInfo.Values["controller"];
            if (objController == null || objController.ToString() != "excluded") 
            {
                //handler code for all non-excluded routes