Ajax JSON 跨域請求 服務(WebApi,WCF或者其他)

程式在 單臺IIS下工作正常,換到域名下(負載均衡)就開開各種跨域瞭。研究瞭下,隻要是符合以下條件的,基本上可以通用一種解決方案:

 

條件是:

 

  1. HTTP方法:GET,Head,POST之外的方法

 

  2. 使用POST方法,而且使用application/x-www-form-urlencoded, multipart/form-data, or text/plain 之外的 Content-Type,例如:以 POST 發送XML、JSON 等

 

  3. 使用自定義頭

 

解決方案:

 

  移除 IIS下的OPTIONSVerbHandler Handle Mapping,

 

  或者 在WebConfig 種 添加:

 

 

 <system.webServer>

<handlers>

      <remove name="OPTIONSVerbHandler" />

      <!– 略 –>

    </handlers>

  </system.webServer>

  再或者 直接攔截OptionS請求,

 

 

if (request.Method.Method==HttpMethod.Options.Method)

                {

                    return base.SendAsync(request, cancellationToken).ContinueWith(

                        task => { return request.CreateResponse(HttpStatusCode.OK); }

                            );

                }

 究其原因,AJAX請求時,總會先發送一個OptionS,接著才發正常的請求。而IIS默認對Options的直接攔截,不做處理,直接返回,但是未包含 Access-Control-Allow-Origin Header,所以請求失敗,就沒有第二次正常的請求瞭。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *