我正在使用nuget包http://nuget.org/packages/AttributeRouting/并为我的web api指定了自定义路由。当我尝试在WebApiConfig中向我的路由添加自定义委托处理程序(dh)时,我的dh永远不会被调用。这是有道理的,因为dh被分配到默认路由,而不是分配给我用web api控制器装饰的自定义路由。我能够全局注册dh并执行它,但是,我想在每条路径上注册自定义dh(不同的路由需要做不同的事情,我不想把大量的逻辑放到一个全局dh中)。 / p>
在使用AttributeRouting包时,有没有人知道如何做到这一点?我搜索了网站上的文档,但没有找到任何内容。
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
根据AttributeRouting website,它不支持WebApi下的某些功能,包括自定义处理程序。认为你可能运气不好。
小心!由于Web API WebHost框架的集成问题, 以下功能无效:
匹配路线,自定义路线处理程序时的性能增强, 查询字符串参数约束,子域路由,本地化 应用于入站/出站网址,小写,附加前缀, 等生成的路线。这些功能都必须等待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,但如果你的需求很简单,那么它可能是一个选择。