В предыдущей версии 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 Framework сильно упростил возможности и настраиваемость Web Api Beta.