88 lines
3.5 KiB
C#
Raw Permalink Normal View History

2025-08-13 11:14:39 +08:00
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;
using System.Web.Http.WebHost;
using System.Web.Routing;
using System.Web.SessionState;
namespace Learun.Application.Web
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//config.MapHttpAttributeRoutes();
//config.Formatters.Remove(config.Formatters.XmlFormatter);//默认的XML格式这样输出数据就会以json格式显示
//var jsonFormatter = config.Formatters.JsonFormatter;
//jsonFormatter.SerializerSettings.Formatting = Formatting.Indented; //将输出结果缩进显示
//jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();//将字段名称改成camelCase格式
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{action}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
config.MapHttpAttributeRoutes();
//Route上传递Session
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }).RouteHandler = new SessionControllerRouteHandler();
RouteTable.Routes.MapHttpRoute(
name: "AppApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }).RouteHandler = new SessionControllerRouteHandler();
//格式化json数据中的时间的T
var jsontimeset = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
jsontimeset.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
jsontimeset.DateFormatString = "yyyy-MM-dd HH:mm:ss";
jsontimeset.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
}
//Session配置之WebApi支持(https://www.cnblogs.com/ca47/p/4603701.html)
public class SessionRouteHandler : HttpControllerHandler, IRequiresSessionState
{
public SessionRouteHandler(RouteData routeData)
: base(routeData)
{
}
}
public class SessionControllerRouteHandler : HttpControllerRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new SessionRouteHandler(requestContext.RouteData);
}
}
public class JsonContentNegotiator : IContentNegotiator
{
private readonly JsonMediaTypeFormatter _jsonFormatter;
public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
{
_jsonFormatter = formatter;
}
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
return result;
}
}
}
}