簡體   English   中英

ASP.NET MVC 4 WebApi條件消息處理程序

[英]ASP.NET MVC 4 WebApi Conditional MessageHandlers

在早期版本的WebApi中,您可以執行以下操作:

RouteTable.Routes.MapServiceRoute<UserService>("1.0/User/", defaultWebApiConfiguration);
RouteTable.Routes.MapServiceRoute<SomeOtherService>("1.0/SomeOtherService/", largeFilesConfig);

這將使您可以對不同的服務使用不同的消息處理程序。 在新框架中,這顯然是不可能的: ASP.NET MVC 4 WebApi對多個HttpConfigurations的支持

或者,我有一些項目,在其中編輯了WebApiConfigurationRequestHandlers以添加處理程序(如果存在某些屬性,如下所示):

    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 API中實現此功能的推薦方法是使用動作過濾器屬性。 盡管您使用一組新的基類來實現它們,但它們的工作方式與MVC幾乎相同。 最簡單的入門方法是從ActionFilterAttribute派生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM