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;
WebApiConfig配置

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名,如下圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM