[C#] .net WebSerivce(.asmx) corss domain 的 is not allowed by Access-Control-Allow-Origin. 問題

2013-06-18

使用AJAX 在呼叫WebService 的時候,在 Chrome 下面會出現
2013-06-18_113508
會出現
OPTIONS http://localhost:32350/TestService.asmx/GetAllUsers 200 (OK) jquery-1.9.1.min.js:5
XMLHttpRequest cannot load http://localhost:32350/TestService.asmx/GetAllUsers. Origin http://localhost:32537 is not allowed by Access-Control-Allow-Origin.
我測過Chrome 會出現這問題,至少還有錯誤訊息
Firefox之firebug 直接啥都沒出現,IE10 還會正常執行(真是厲害)
這要如何解決呢?!
在一般狀況下,通常在寫.ashx 來提供service provider 的時候只需要加上

Context.Response.AddHeader("Access-Control-Allow-Origin", "*");
Context.Response.ContentType = "application/json";

就可以解決,但是我在webservice 中的ctor 加入是無效的依然會出現

這時候需要再Web.Config 裡面加入這一段


<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
    </customHeaders>
  </httpProtocol>
</system.webServer>



使得Web.Config 全文為


<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
-->
 

<configuration>
    <system.web>
      <compilation debug="true" targetFramework="4.0" />
    </system.web>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>


這樣就可以呼叫了

文章參考:

http://encosia.com/using-cors-to-access-asp-net-services-across-domains/


當麻許的超技八 2014 | Donma Hsu Design.