Asp.Net Web-api 不可多得的零基础教程9
2018-04-11 23:24
260 查看
通信协商
1.设置请求的Accept:application/json或者application/xml2.设置Content-Type:application/json或者application/xml
3.Accept: application/xml;q=0.2, application/json;q=0.8 这种情况下,就返回q大的类型。
修改通信模式方式1:QueryStringMapping
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.Formatters.JsonFormatter.MediaTypeMappings.Add( new QueryStringMapping("frmt", "json", new MediaTypeHeaderValue("application/json"))); }或者
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.Formatters.XmlFormatter.MediaTypeMappings.Add( new QueryStringMapping("frmt", "xml", new MediaTypeHeaderValue("application/xml"))); }
config.Formatters.JsonFormatter.MediaTypeMappings .Add(
new QueryStringMapping("frmt", "json",new MediaTypeHeaderValue("application/json"))
);
请求的时候使用: http://localhost:55778/api/employees/12345?frmt=json
这样即便指定Accept:也是不顶用的。返回的一定是json
修改通信模式方式2:RequestHeaderMapping
config.Formatters.JsonFormatter.MediaTypeMappings.Add( new RequestHeaderMapping( "X-Media", "json", StringComparison.OrdinalIgnoreCase, false, new MediaTypeHeaderValue("application/json")));GET http://localhost:12345/api/Demo/123 HTTP/1.1 Accept: application/xml
X-Media: json
Host: localhost:55778
RequestHeaderMapping 优先级比QueryStringMapping高。
修改通信模式方式3:MediaTypeMapping
public class IPBasedMediaTypeMapping : MediaTypeMapping { public IPBasedMediaTypeMapping() :base(new MediaTypeHeaderValue("application/json")) { } public override double TryMatchMediaType(HttpRequestMessage request) { string ipAddress = String.Empty; if (request.Properties.ContainsKey("MS_HttpContext")) { var httpContext = (HttpContextBase)request.Properties["MS_HttpContext"]; ipAddress = httpContext.Request.UserHostAddress; } else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name)) { RemoteEndpointMessageProperty prop; prop = (RemoteEndpointMessageProperty) request.Properties[RemoteEndpointMessageProperty.Name]; ipAddress = prop.Address; } return "::1".Equals(ipAddress) ? 1.0 : 0.0; } }
config.Formatters.JsonFormatter.MediaTypeMappings.Add(new IPBasedMediaTypeMapping());只要是Ipv6的Ip地址都可以。
重写返回类型:
public HttpResponseMessage Get(int id){
var employee = list.FirstOrDefault(e => e.Id == id);
return new HttpResponseMessage()
{
Content = new ObjectContent<Employee>(employee,
Configuration.Formatters.JsonFormatter)
};
}
修改通信模式方式3:MediaTypeMapping
相关文章推荐
- Asp.Net Web-api 不可多得的零基础教程10
- ASP.Net Web-api 不可多得的零基础教程2
- ASP.Net Web-api 不可多得的零基础教程8
- ASP.Net Web-api 不可多得的零基础教程1
- ASP.Net Web-api 不可多得的零基础教程4
- ASP.Net Web-api 不可多得的零基础教程3
- ASP.Net Web-api 不可多得的零基础教程6
- ASP.Net Web-api 不可多得的零基础教程7
- [ASP.NET 教程] 一. Web基础
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- Asp.Net Core WebApi中接入Swagger组件(初级)
- ASP.NET Core WebAPI 开发-新建WebAPI项目
- asp.net 2.0教程 c#语言基础语句
- 在ASP.NET Core Web API上使用Swagger提供API文档
- ASP.Net Core WebApi几种版本控制对比
- ASP.NET MVC 4 WebAPI Simple Sample
- ASP.Net Core WebApi几种版本控制对比
- ASP.NET WebAPI RC 竟然不支持最常用的json传参
- asp.net构建Web服务基础(含SOAP相关知识)
- Gitlab CI 自动部署 asp.net core web api 到Docker容器