RealPath:
WebPath:
2016/11/08 17:47 (JST) 更新
Tipsその2 >>

クロスオリジン対応

Contents

異なるドメインからの AJAX アクセスを許可するためには、該当リソースのレスポンスヘッダに Access-Control-Allow-Origin: * を付ける必要があります。

Controller の場合

HomeController.cs
public class HomeController : Controller
{
    public ActionResult Index()
    {
        Response.Headers["Access-Control-Allow-Origin"] = "*"; // ★該当アクションにこれを追加
        return View();
    }

これで Home/Index のレスポンスヘッダに Access-Control-Allow-Origin: * が付与され、クロスオリジンアクセス可能になります。

ApiController の場合

ApiController は Controller とは違い、Response メンバをもっていないため、上述と同じ方法は使えません。

 
Package Manager Console で以下を実行します。

PM> Install-Package Microsoft.AspNet.WebApi.Cors

 
App_Start/WebApiConfig.cs を編集

public static void Register(HttpConfiguration config)
{
    config.EnableCors(); // ★ここを追加

    ....

 
該当コントロール (今回は ValuesController.cs) を編集

using System.Web.Http.Cors; // ★ここを追加
....
[EnableCors(origins: "*", headers: "*", methods: "*")] // ★ここを追加
public class ValuesController : ApiController
{
    public object Get()
    {
        return new string[] { "aaa", "bbb" };
    }
}

これで api/values へのアクセスはクロスオリジン対応になりました。

 
■メモ
これでクロスオリジンでアクセス可能なことは確認できたが、デバッガで確認した限りでは Access-Control-Allow-Origin ヘッダは付与されていなかった。でも動く。謎。(あとで詳細分かったら追記します)