【发布时间】:2012-03-29 02:36:42
【问题描述】:
在以前版本的 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
另外,我有一些项目,我在 WebApiConfiguration 中编辑了 RequestHandlers,以便在某些属性存在时添加处理程序:
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。这不再可能,因为HttpConfiguration 上的MessageHandlers 不可设置。
总而言之,我的问题是如何指定某些消息处理程序仅适用于某些 ApiController 服务而不是所有服务。似乎 ASP.NET MVC 4 WebApi 框架过度简化了 Web Api Beta 的功能和可配置性。
【问题讨论】:
-
如果您自己托管,您可以创建多个服务。目前在 Web 主机中没有办法。
标签: c# asp.net-mvc-3 asp.net-mvc-4 asp.net-web-api