2012-03-29 88 views
0

在以前的版本中,你可以做以下的的WebAPI的:ASP.NET MVC 4的WebAPI條件MessageHandlers

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

這將讓你有不同的服務不同的消息處理程序。這顯然是不可能的,在新的框架:ASP.NET MVC 4 WebApi Support For Multiple HttpConfigurations

或者我有項目,我在WebApiConfiguration編輯RequestHandlers添加處理程序,如果某些屬性存在這樣的:

該代碼是基於: http://haacked.com/archive/2011/10/19/implementing-an-authorization-attribute-for-wcf-web-api.aspx。這是不可能的,因爲MessageHandlersHttpConfiguration是不可設置的。

總而言之,我的問題是如何指定某些消息處理程序僅適用於某些ApiController服務而不是全部這些服務。看起來,ASP.NET MVC 4 WebApi框架已經過度簡化了Web Api Beta的功能和可配置性。

+0

如果您是自主主機,則可以創建多個服務。目前在Web主機中沒有辦法。 – 2012-03-29 02:59:02

回答

0

在新的Web API中實現此功能的推薦方法是使用操作篩選器屬性。儘管您使用了一組新的基類來實現它們,但它們的工作方式與MVC中的幾乎相同。最簡單的方法是從ActionFilterAttribute派生。

+0

是的。我熟悉actionfilters,但在我的一個案例中,我有一個消息處理程序,它也稱爲ContinueWith,因此流程是調用消息處理程序,然後是實際服務,然後是消息處理程序。關於這一點很酷的是我能夠將變量從入口消息處理函數傳遞給出口消息處理函數。這不適用於OnActionExecuting和OnActionExecuted,因爲您無法將執行變量從執行功能傳遞到執行功能。 – 2012-03-29 06:31:28

+0

看起來像ActionArguments可能是一個解決方案。 – 2012-03-29 06:37:15

+2

@nextgenneo ActionArguments是將傳遞到action方法的參數。不要使用它。相反,使用'HttpRequestMessage.Properties'。 – marcind 2012-03-29 16:32:58