Asp.net mvc 4 ASP.NET MVC 4每个路由的属性计算DelegatingHandler

Asp.net mvc 4 ASP.NET MVC 4每个路由的属性计算DelegatingHandler,asp.net-mvc-4,asp.net-web-api,attributerouting,Asp.net Mvc 4,Asp.net Web Api,Attributerouting,我正在使用nuget包,并为我的web api指定了自定义路由。当我尝试在WebApiConfig中将自定义delegatinghandler(dh)添加到我的路由时,我的dh从未被调用。这是有意义的,因为dh被分配给默认路由,而不是分配给我装饰web api控制器的自定义路由。我能够在全球范围内注册dh并执行它,但是,我想注册每个路由的自定义dh(不同的路由需要做不同的事情,我不想在一个全球dh中加入大量逻辑) 有人知道如何在使用AttributeRouting包时执行此操作吗?我在网站上搜索

我正在使用nuget包,并为我的web api指定了自定义路由。当我尝试在WebApiConfig中将自定义delegatinghandler(dh)添加到我的路由时,我的dh从未被调用。这是有意义的,因为dh被分配给默认路由,而不是分配给我装饰web api控制器的自定义路由。我能够在全球范围内注册dh并执行它,但是,我想注册每个路由的自定义dh(不同的路由需要做不同的事情,我不想在一个全球dh中加入大量逻辑)

有人知道如何在使用AttributeRouting包时执行此操作吗?我在网站上搜索了文档,但没有找到任何东西

非常感谢您的帮助。谢谢

根据,它不支持WebApi下的某些功能,包括自定义处理程序。我想你可能运气不好

当心!由于与Web API WebHost框架的集成问题, 以下功能将不起作用:

匹配路由、自定义路由处理程序、, 查询字符串参数约束、子域路由、本地化 应用于入站/出站URL,以及小写和附加前缀, 等生成的路线。这些特性都必须等待vNext的 Web API

如果您不需要AttibuteRouting提供的所有扩展路由,您可以使用自己的路由属性,然后在启动期间基于该属性注册路由。e、 g:

public class RouteAttribute : Attribute
{
    public string Value { get; private set; }

    public RouteAttribute (string value)
    {
        Value = value;
    }
}
然后根据控制器中的装饰类或操作注册路由:

    foreach (var controllerType in controllers)
        {
        var attributes = System.ComponentModel.TypeDescriptor.GetAttributes(controllerType);
        var uriattribute = (RouteAttribute)attributes[typeof(RouteAttribute)];
        var controllerName = controllerType.Name.Replace("Controller", "");

        string uri = uriattribute.Value;

        config.Routes.MapHttpRoute(
            name: controllerName,
            routeTemplate: uri,
        handler: new YourCustomHandler()
        }
    }

显然,您不想重写AttributeRouting,但如果您的需求很简单,那么它可能是一个选项

谢谢@SimonC。目前我只需要两个自定义处理程序,基本上每个控制器都需要检查身份验证,除了注册访问时,不会提供哪些凭据。我想我只需要全局注册我的处理程序(GlobalConfiguration.Configuration.MessageHandlers.Add(DependencyResolver.Current.GetService());),然后添加一些简单的逻辑来检查用户是否正在注册。正如你所看到的,如果接下来需要更多的处理器,这可能会变得笨重。Np@crizzycrizz。如何全局应用处理程序(或作为全局过滤器),然后修饰未经身份验证的控制器以允许anon访问。检查
[System.Web.Http.AllowAnonymous]
属性,它就是这样做的。如果我可以在我的路由上说[Handler(new MyCustomHandler())],让AttributeRouting在注册自定义路由时抓取该属性并分配它,那就太愚蠢了;看起来很琐碎。@crizzwald,我建议你用叉子叉一下,再加上那个功能。把它擦掉。我终于发现,AttributeRouting已经被合并到(beta版)。因此,您需要检查那里是否有您想要的任何功能。请给出一些示例,说明您的委托处理程序将执行哪些操作?