![](/img/trans.png)
[英]Implement DelegatingHandler in ASP.NET Core 5.0 Web API?
[英]DelegatingHandler not executing ASP.Net Web Api
今天我在我的 Web Api 應用程序中遇到了一個奇怪的行為
protected void Application_Start() {
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configuration
.MessageHandlers.Add(new DummyMessageHandler());
}
我的 DelegatingHandler 看起來像這樣。
public class DummyMessageHandler : DelegatingHandler {
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken) {
* if (request.Headers.Authorization.Scheme == "Basic")
Thread.CurrentPrincipal = new GenericPrincipal(
new GenericIdentity("Authenticated"), new string[0]);
return base.SendAsync(request, cancellationToken);
}
}
我遇到的問題是委托處理程序沒有被執行。 我在標有 * 的行中有一個斷點,並且我的代碼的執行永遠不會停止。
我的 nuget packages.config 如下:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.Mvc" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Razor" version="2.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.Client" version="4.1.0-alpha-120809" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.Core" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebPages" version="2.0.20710.0" targetFramework="net40" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="Newtonsoft.Json" version="4.5.8" targetFramework="net40" />
<package id="WebGrease" version="1.1.0" targetFramework="net40" />
</packages>
我看這個很久了,你能指出我遺漏的東西嗎? 謝謝
你所做的是正確的。 問題可能會發生,因為DelegatingHandler
僅在您調用 Web API 控制器操作時運行。 例如:
這將調用您的 Message Handler ,因為它是一個 ApiController。
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
這不會,因為它只是一個控制器。
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Title = "Home Page";
return View();
}
}
確保您正在調用 Web API 控制器操作,否則調試器將不會到達您的斷點。
你應該在 WebApiConfig 文件中注冊你的處理程序,而不是在 global.asax
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.MessageHandlers.Add( new DummyMessageHandler());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.