DelegatingHandler不执行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 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如下:

                

我在看这个很长一段时间了,你能指点我错过的东西吗? 谢谢

你所做的是正确的。 问题可能正在发生,因为DelegatingHandler仅在您调用Web API Controller操作时运行。 例如:

这将调用您的Message Handler ,因为它是ApiController。

 public class ValuesController : ApiController { // GET api/values public IEnumerable Get() { return new string[] { "value1", "value2" }; } } 

这不会 ,因为它只是一个控制器。

 public class HomeController : Controller { public ActionResult Index() { ViewBag.Title = "Home Page"; return View(); } } 

确保您正在调用Web API Controller操作,否则调试器不会达到您的断点。

您应该在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 } ); } }