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 ヘッダは付与されていなかった。でも動く。謎。(あとで詳細分かったら追記します)