ASP.NET MVC 4 WebApi Условные MessageHandlers - PullRequest
0 голосов
/ 29 марта 2012

В предыдущей версии 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.

1 Ответ

0 голосов
/ 29 марта 2012

Рекомендуемый способ достижения этого в новом веб-API - с помощью атрибутов фильтра действий. Они работают почти так же, как в MVC, хотя для их реализации вы используете новый набор базовых классов. Самый простой способ начать работу - извлечь из ActionFilterAttribute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...