我有一个WebApi在我的代码中抛出异常的问题:
public class WebApiAuthenticationHandler : DelegatingHandler { private const string AuthToken = "AUTH-TOKEN"; protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request,CancellationToken cancellationToken) { var requestAuthTokenList = GetRequestAuthTokens(request); if (ValidAuthorization(requestAuthTokenList)) { // EXCEPTION is occuring here!.... return base.SendAsync(request,cancellationToken); } /* ** This will make the whole API protected by the API token. ** To only protect parts of the API then mark controllers/methods ** with the Authorize attribute and always return this: ** ** return base.SendAsync(request,cancellationToken); */ return Task<HttpResponseMessage>.Factory.StartNew( () => { var resp = new HttpResponseMessage(HttpStatusCode.Unauthorized) { Content = new StringContent("Authorization Failed") }; //var resp = new HttpResponseMessage(HttpStatusCode.Unauthorized); //resp.Headers.Add(SuppressFormsAuthenticationRedirectModule.SuppressFormsHeaderName,"true"); return resp; }); }
例外情况正在发生:
base.SendAsync(request,cancellationToken);
routes.MapHttpRoute("NoAuthrequiredApi","api/auth/",new { Controller = "Auth" }); routes.MapHttpRoute("DefaultApi","api/{controller}/{id}",new { id = RouteParameter.Optional },null,new WebApiAuthenticationHandler());
发生这种路由是DefaultApi路由.任何帮助非常感谢….
解决方法
找到答案
here和一个示例处理程序
here.
您需要设置您希望传递的请求的InnerHandler.
public class WebApiAuthenticationHandler : DelegatingHandler { public WebApiAuthenticationHandler(HttpConfiguration httpConfiguration) { InnerHandler = new HttpControllerDispatcher(httpConfiguration); }
并在创建新实例时传递对GlobalConfiguration的引用:
routes.MapHttpRoute("DefaultApi",WebApiAuthenticationHandler(GlobalConfiguration.Configuration));