我有一個ASP.NET MVC的Web API控制器:路由專用ASP.NET MVC的Web API的消息處理程序不調用控制器動作
[HttpPost]
public async Task<HttpResponseMessage> Post(HttpRequestMessage req, CancellationToken cancellationToken) {...}
而且我創建了一個自定義的消息處理程序:
public class MyMessageHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// ...
var response = await base.SendAsync(request, cancellationToken);
// ...
return response;
}
}
而在WebConfigApi.cs
我線了的消息處理程序的控制器的操作方法路由專用:
configuration.Routes.MapHttpRoute(
name: "UpdateStuffAPI",
routeTemplate: "api/updatestuff/post/{stuffid}",
defaults: new { feedid = RouteParameter.Optional },
constraints: null,
handler: new MyMessageHandler()
);
當我POST到控制器的操作方法,例如:
http://hostname/api/updatestuff/post?stuffid=12345
消息處理器攔截如預期的請求。但是,在經行步:
var response = await base.SendAsync(request, cancellationToken);
的控制器的操作方法是從來沒有擊中。
作爲測試我刪除了路由專用接線和取得的消息處理全球:
configuration.MessageHandlers.Add(new MyMessageHandler());
和SendAsync
正確調用我的控制器的操作方法。
所以我認爲路由定義有問題。然而,消息處理程序是與特定路線佈線調用,和,Route Debugger表明正在使用時,我後到我的控制器(http://hostname/api/updatestuff/post?stuffid=12345
),該路由是。
爲什麼我的行爲方法被調用時,我以特定於路線的方式連接消息處理程序?
我在一點使用屬性路由,但指定消息處理程序仍然必須完成,並且我相信路由映射定義是必需的。 – Howiecamp