[英]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的支持
或者,我有一些項目,在其中編輯了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 API中實現此功能的推薦方法是使用動作過濾器屬性。 盡管您使用一組新的基類來實現它們,但它們的工作方式與MVC幾乎相同。 最簡單的入門方法是從ActionFilterAttribute
派生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.