2013年10月31日 星期四

如何 ASP.NET MVC 4 WebApi 跨域傳輸資料

ASP.NET MVC 4 WebApi 專案中,架構上把不同功能的 WebApi 全部都切開,也就是說,將每一塊功能的 Api 都設一個網域,將資料結構分散。因為WebApi 架設在雲端,所以如果某個專案負載過重,也只需要針對一組專案做環境上的調整。

現在問題來了,當我在做跨網域資料存取時,發生無法存取的問題,原因只是因為對 WebApi 存取預設只有自己的網域才可以,所以必須要設置允許網域。

方法 1.


直接修改 web.config ,不過這是針對所有 Action。
<location path="Sample.txt">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
</location>

方法 2.


加入一個類別,內容為以下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System;
using System.Web.Http.Filters;

namespace Workflow.Filters
{
    public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            if (actionExecutedContext.Response != null)
                actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");

            base.OnActionExecuted(actionExecutedContext);
        }
    }
}

最後你在 Controller 或者是 Action 上面加上屬性,即可允許跨網域傳輸資料:
    [AllowCrossSiteJson]
    public class InstancesController : ApiController
    {
        // ......

    }




沒有留言 :

張貼留言

Related Posts Plugin for WordPress, Blogger...