按照之前的文章《創建第一個WebAPI項目》新建好WebAPI項目後,在本項目中調用WebAPI沒問題。
但今天在另一個項目調用這個WebAPI項目,就一直沒有數據返回。糾結了一個下午,發現原來是跨域問題。在以下文章得到解決方法。
https://www.cnblogs.com/hnsongbiao/p/9375997.html
以下記錄本次問題解決過程:
1、使用Nuget搜索“microsoft.aspnet.webapi.cors”安裝第一個。安裝好後可以“引用”處查看到以下2個packages
2、在App_Start文件夾下面的WebApiConfig.cs文件夾配置跨域:
3、如文章的言,在IE下確實還是不行。
那麼如何解決IE瀏覽器支持問題呢,其實在調用處指定 jQuery.support.cors = true; 這一句就能解決IE8、9的問題了。--加了“jQuery.support.cors = true;”果然可以。
4、考慮到安全問題。不能對所有請求都接受。於是需要限制請求的來源。
配置方法一
在Web.Config配置:
<appSettings>
<!--限制請求到WebAPI的來源 -->
<add key="cors:allowedMethods" value="*"/>
<add key="cors:allowedOrigin" value="http://localhost:8089"/>
<add key="cors:allowedHeaders" value="*"/>
</appSettings>
(PS:注意需要引用System.Configuration)
--經測試,如果非http://localhost:8089 調用,確實調用不成功。
配置方法二
如果你只想對某一些api做跨域,可以直接在API的類上面使用特性標註即可。
[EnableCors("http://localhost:8082,http://localhost:8089", "*", "*", SupportsCredentials = true)]