[ASP.NET Web API] JavaScript によるクロスドメインのアクセスを許可

ASP.NET Web API のサイトへ JavaScript からアクセスする場合、サーバー側の設定を行わないとクロスドメインでアクセスできません。

レスポンスに Access-Control-Allow-Origin ヘッダーを追加してクライアントからのアクセスを許可します。

AllowCrossSiteJsonAttribute クラスを新規に作成します。

AllowCrossSiteJsonAttribute.vb
Public Class AllowCrossSiteJsonAttribute
    Inherits System.Web.Http.Filters.ActionFilterAttribute

    Public Overrides Sub OnActionExecuted(actionExecutedContext As Http.Filters.HttpActionExecutedContext)
        If actionExecutedContext.Request IsNot Nothing Then
            actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*")
        End If
        MyBase.OnActionExecuted(actionExecutedContext)
    End Sub

End Class

ポイントは、System.Web.Http.Filters.ActionFilterAttribute を継承しているところです。ASP.NET Web API のプロジェクトで、単に ActionFilterAttribute と記載すると別の名前空間のものを参照してしまいます。

対象のコントローラーに AllowCrossSiteJson 属性を付ければ完了です(クラス単位でもメソッド単位でも OK)。

ValuesController.vb
 <AllowCrossSiteJson>
 Public Function GetValue(ByVal id As Integer) As String
     Return ""
 End Function

(via json – Setting Access-Control-Allow-Origin in ASP.Net MVC – simplest possible method – Stack Overflow)