В предыдущей версии WebApi вы могли сделать следующее:
RouteTable.Routes.MapServiceRoute<UserService>("1.0/User/", defaultWebApiConfiguration);
RouteTable.Routes.MapServiceRoute<SomeOtherService>("1.0/SomeOtherService/", largeFilesConfig);
Это позволит вам иметь разные обработчики сообщений в разных службах. Очевидно, это невозможно в новой структуре: ASP.NET MVC 4. Поддержка WebApi для нескольких конфигураций Http
В качестве альтернативы у меня были проекты, в которых я редактировал 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.