我能夠成功註冊內的global.asax.cs自定義的路由處理(從IRouteHandler導出)爲Web API路線ALA:自定義路由處理程序
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{client}/api/1.0/{controller}/{action}/{id}",
defaults: new{id = UrlParameter.Optional}
).RouteHandler = new SingleActionAPIRouteHandler();
不過,我可以在嘗試爲集成測試API設置內存主機時,似乎找不到方法來執行此操作,當我調用HttpConfiguration.Routes.MapRoute時,我無法在返回的IHttpRoute上設置處理程序。
我應該這樣做不同(例如通過使用自定義的HttpControllerSelector)?我顯然希望在兩種情況下都以同樣的方式進行。
謝謝, 馬特
編輯:
所以我落得這樣做基本上採取從下面的建議,而是簡單地重寫HttpControllerDispatcher類,如下所示:
public class CustomHttpControllerDispatcher : HttpControllerDispatcher
{
public CustomHttpControllerDispatcher(HttpConfiguration configuration) : base(configuration)
{
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// My stuff here
return base.SendAsync(request, cancellationToken);
}
}
非常感謝馬克,我承認自己很新的的WebAPI框架的內部,你可以解釋爲什麼這種方法比提供定製IHttpControllerSelector到更好組態?它看起來像默認的HttpControllerDispatcher使用配置中定義的ControllerSelector來處理我正在尋找的工作。 – mattcole
@mattcole我應該有一點更清楚對不起 - 我想確認你是正確的,我懷疑(你已經這樣做),你應該看看一個自定義的HttpControllerSelector http://netmvc.blogspot.co.uk /作爲首選項,如果你正在做的是轉發給控制器。我只是在想,或許你是在做比選擇控制器更多的東西,或許還想使用除控制器之外的其他處理程序等等...... CustomHttpControllerDispatcher的想法有點像玩具和實驗......抱歉不清楚。 –
沒問題馬克,最後我用你建議的版本去了,因爲我實際上只改變了路徑值中的一些值,我只是覆蓋了SendAsync方法,完成了我的工作,然後讓管道繼續運行。 – mattcole