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 } ); } }