我知道您可以使用基于约定的路由分配处理程序,例如:
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
);
}
}
是否可以使用属性路由来执行此操作?我正在尝试做的是限制一些带有承载令牌的路由,但允许其他路由允许匿名访问。我应该使用过滤吗?
答案 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