2013年7月8日 星期一

ASP.net 2012 api 要跨網域方法

假設我們今天開發了一個 ASP.NET Web API 的 Web Services ,這個 Service 的主機名稱為 www.web1.com (稱A),同時我們也開發另外一個網站主機名稱為 www.web2.com (稱B),然而假設 B 網站存取 A 網站的 Web API ,所以我們使用 XMLRequest 或 jQuery 的 $.ajax 來呼叫我們的 Web API ,不幸的是這樣的溝通是會出錯的,因為瀏覽器不允許使用 AJAX 來呼叫外部的資源。

不過雖然瀏覽器為了安全起見阻止此類的呼叫,不過假設我們今天的請求是合法的呢?




從錯誤訊息中我們可以清楚看到 XMLHttpRequest 調用失敗,並且明確寫著來源不允許請求 "Access-Control-Allow-Origin",而什麼是  "Access-Control-Allow-Origin":當每次網頁伺服器在回應瀏覽器請求時,而當 HTTP Header 中有時會帶有  "Access-Control-Allow-Origin" 時,就可以做到跨網域的請求。


解決方法

 web.config 這個設定的作法比較簡單,但還是存在著風險,因為這樣的設定可以讓全世界的網站都可以來存取你這個網站的所有 Web API,就算是 Google 或 Facebook 也不可能公開所有的 API 來讓一般使用者存取

<system.webServer>
//裡面加入

 <httpProtocol>

    <customHeaders>
              <add name="Access-Control-Request-Origin" value="*"></add>
              <add name="Access-Control-Request-Headers" value="Origin,X-Requested-With,Content-Type,Accept" ></add>
             <add name="Access-Control-Request-Method" value="POST,GET,PUT,DELETE,OPTIONS" ></add>
    </customHeaders>
    </httpProtocol>  


0 意見:

張貼留言