当前位置:首页 > Windows程序 > 正文

web api control注册及重写DefaultHttpControllerSelector、ApiControl

2021-03-29 Windows程序

namespace EWorkpal.WebApi { public class HttpNotFoundDefaultHttpControllerSelector : DefaultHttpControllerSelector { public HttpNotFoundDefaultHttpControllerSelector(HttpConfiguration configuration) : base(configuration) { } public override HttpControllerDescriptor SelectController(HttpRequestMessage request) { HttpControllerDescriptor decriptor = null; try { decriptor = base.SelectController(request); } catch (HttpResponseException ex) { var code = ex.Response.StatusCode; var result = new EWorkResultInfo<object> { Code = 10006, Entity = ex.Response.Content.ReadAsAsync<object>().Result }; if (code == HttpStatusCode.NotFound || code == HttpStatusCode.MethodNotAllowed) { ex.Response.Content = new ObjectContent(typeof(EWorkResultInfo), result, GlobalConfiguration.Configuration.Formatters.JsonFormatter); } throw; } return decriptor; } } public class HttpNotFoundControllerActionSelector : ApiControllerActionSelector { public override HttpActionDescriptor SelectAction(HttpControllerContext controllerContext) { HttpActionDescriptor decriptor = null; try { decriptor = base.SelectAction(controllerContext); } catch (HttpResponseException ex) { var code = ex.Response.StatusCode; var result = new EWorkResultInfo<object> { Code = 10006, Entity = ex.Response.Content.ReadAsAsync<object>().Result }; if (code == HttpStatusCode.NotFound || code == HttpStatusCode.MethodNotAllowed) { ex.Response.Content = new ObjectContent(typeof(EWorkResultInfo), result, GlobalConfiguration.Configuration.Formatters.JsonFormatter); } throw; } return decriptor; } } public class CustomApiControllerActionInvoker : ApiControllerActionInvoker { public override Task<HttpResponseMessage> InvokeActionAsync(HttpActionContext actionContext, CancellationToken cancellationToken) { var responseMessage = base.InvokeActionAsync(actionContext, cancellationToken); if (responseMessage.Exception != null) { var baseException = responseMessage.Exception.InnerExceptions[0]; var result = new EWorkResultInfo<object> { Message = baseException.Message, //"服务器内部错误", Code = 10001, Entity = responseMessage.Exception }; if (baseException is TimeoutException) { result.Code = 10004; //result.Message = "任务超时"; } return Task.Run(() => new HttpResponseMessage() { Content = new ObjectContent(typeof(EWorkResultInfo<object>), result, GlobalConfiguration.Configuration.Formatters.JsonFormatter) }, cancellationToken); } return responseMessage; } } }

webapi.config

public static class WebApiConfig { /// <summary> /// /// </summary> /// <param></param> public static void Register(HttpConfiguration config) { // Web API configuration and services config.Filters.Add(new EWorkAuthorize()); config.Filters.Add(new ModelValidationFilterAttribute()); config.Services.Replace(typeof(IHttpActionInvoker), new CustomApiControllerActionInvoker()); config.Services.Replace(typeof(IHttpControllerSelector), new HttpNotFoundDefaultHttpControllerSelector(config)); config.Services.Replace(typeof(IHttpActionSelector), new HttpNotFoundControllerActionSelector()); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}"//,//{id} //defaults: new { id = RouteParameter.Optional } ); var xmlFormatter = config.Formatters.FirstOrDefault(m => m is XmlMediaTypeFormatter); config.Formatters.Remove(xmlFormatter); config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; config.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd hh:mm"; } }

global注册

GlobalConfiguration.Configure(WebApiConfig.Register);

web api control注册及重写DefaultHttpControllerSelector、ApiControllerActionSelector、ApiControllerActionInvoker

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69730.html