在以前版本的WebApi中,您可以执行以下操作:
RouteTable.Routes.MapServiceRoute<UserService>("1.0/User/", defaultWebApiConfiguration);
RouteTable.Routes.MapServiceRoute<SomeOtherService>("1.0/SomeOtherService/", largeFilesConfig);
这将允许您在不同的服务上使用不同的消息处理程序。这在新框架中显然是不可能的:ASP.NET MVC 4 WebApi Support For Multiple HttpConfigurations
或者我有项目,我在RequestHandlers
中编辑了WebApiConfiguration
以添加处理程序,如果某些属性存在,则:
public static void AppendAuthorizationRequestHandlers(
this WebApiConfiguration config)
{
var requestHandlers = config.RequestHandlers;
config.RequestHandlers = (c, e, od) =>
{
if (requestHandlers != null)
{
requestHandlers(c, e, od); // Original request handler
}
var authorizeAttribute = od.Attributes.OfType<RequireAuthorizationAttribute>()
.FirstOrDefault();
if (authorizeAttribute != null)
{
c.Add(new AuthOperationHandler(authorizeAttribute));
}
};
}
该代码基于:http://haacked.com/archive/2011/10/19/implementing-an-authorization-attribute-for-wcf-web-api.aspx。由于MessageHandlers
上的HttpConfiguration
无法设置,因此无法再进行此操作。
总结一下,我的问题是如何指定某些消息处理程序仅适用于某些ApiController服务而不是所有服务。似乎ASP.NET MVC 4 WebApi框架已经过度简化了Web Api Beta的功能和可配置性。
答案 0 :(得分:0)
在新的Web API中实现此目的的推荐方法是使用操作过滤器属性。它们的工作方式与MVC中的方式非常相似,但您使用一组新的基类来实现它们。最简单的入门方法是从ActionFilterAttribute
派生。