webapi踩的坑
Posted 二蛋的蛋糕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webapi踩的坑相关的知识,希望对你有一定的参考价值。
1.webapi跨域 需要在web.config的<system.webServer></system.webServer>节点中添加
<!--跨域--> <httpProtocol> <!--跨域配置开始--> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <!--支持全域名访问,不安全,部署后需要固定限制为客户端网址--> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> <!--支持的http 动作--> <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type" /> <!--响应头 请按照自己需求添加 这里新加了token这个headers--> <add name="Access-Control-Request-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> <!--允许请求的http 动作--> </customHeaders> <!--跨域配置结束--> </httpProtocol>
2.webapi设置默认返回json格式 需要在WebApiConfig文件的Register方法中添加以下代码
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); //默认返回 json GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add( new QueryStringMapping("datatype", "json", "application/json")); // 解决json序列化时的循环引用问题 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
3.post请求webapi传参问题
移步到:https://www.cnblogs.com/landeanfen/p/5337072.html
4.跨域请求需要传自定义头导致请求失败时
跨域请求会先发送一个预处理请求再发送实际请求,预处理请求是OPTIONS类型,所以需要给他特殊处理一下
(1)在Global.asax文件中添加以下方法:
protected void Application_BeginRequest(object sender, EventArgs e) { var res = HttpContext.Current.Response; var req = HttpContext.Current.Request; //自定义header时进行处理 if (req.HttpMethod == "OPTIONS") { res.AppendHeader("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie"); res.AppendHeader("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS"); res.StatusCode = 200; res.End(); } }
(2)在web.config的跨域配置中找到name=“Access-Control-Allow-Headers” ,然后在它的value中加上自己所传的自定义header名,如下图
以上是关于webapi踩的坑的主要内容,如果未能解决你的问题,请参考以下文章