using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json.Serialization;
using MyCode.Project.WebApi.App_Filter;
using MyCode.Project.WebApi.Providers;
using System.Web.Http.Dispatcher;
using Newtonsoft.Json;
namespace MyCode.Project.WebApi
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new ExceptionHandleAttribute());
config.Filters.Add(new ResultHandleAttribute());
// Web API 配置和服务
// 将 Web API 配置为仅使用不记名令牌身份验证。
// config.SuppressDefaultHostAuthentication();
config.Filters.Add(new AuthorizeFilter());
//config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API 路由
config.MapHttpAttributeRoutes();
config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttpControllerSelector(config));
config.Routes.AddAreaRoute("Admin", "MyCode.Project.WebApi.Areas.Admin.Controllers");
config.Routes.AddAreaRoute("Wechat", "MyCode.Project.WebApi.Areas.Wechat.Controllers");
config.Routes.AddAreaRoute("Member", "MyCode.Project.WebApi.Areas.Member.Controllers");
config.Routes.MapHttpRoute(
name: "CommonApi",
routeTemplate: $"api{MyCode.Project.Domain.Config.SystemConfig.ApiVersion}" + "/{controller}/{action}/{id}",
defaults: new
{
action = RouteParameter.Optional,
id = RouteParameter.Optional,
namespaces = new string[] { "MyCode.Project.WebApi.Controllers" }
}
);
Formater(config);
}
#region AddAreaRoute(添加路由)
///
/// 添加路由
///
/// 路由集合
/// 路由名
/// 命名空间
private static void AddAreaRoute(this HttpRouteCollection routes, string name, string namespaces)
{
routes.MapHttpRoute(
name: name + "Api",
routeTemplate: $"api{MyCode.Project.Domain.Config.SystemConfig.ApiVersion}/" + name + "/{controller}/{action}/{id}",
defaults: new
{
action = RouteParameter.Optional,
id = RouteParameter.Optional,
namespaces = new string[] { namespaces }
});
}
#endregion
#region Formater(响应参数格式化)
///
/// 响应参数格式化
///
/// Http配置
private static void Formater(HttpConfiguration config)
{
var formatters = config.Formatters;
var jsonFormatter = formatters.JsonFormatter;
var settings = jsonFormatter.SerializerSettings;
settings.Formatting = Newtonsoft.Json.Formatting.Indented;
settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";//全局处理 返回时间格式
settings.DateTimeZoneHandling = DateTimeZoneHandling.Local;//全局处理 接收时间并做本地化处理
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();//首字母小写驼峰式命名
}
#endregion
}
}