簡體   English   中英

在Azure Mobile Serivce .NET后端啟用CORS

[英]Enable CORS on Azure Mobile Serivce .NET Backend

我修改了一個ASP.NET Web API 2項目以使用Microsoft Azure Mobile Servies。 我正在開發一個Phonegap應用程序並使用我的桌面Chrome瀏覽器和本地運行的Azure移動服務對其進行測試。

在我“轉換”我的項目之前,我在我的啟動代碼中使用這行代碼處理CORS(需要NuGet包Microsoft.AspNet.WebApi.Cors):

#if DEBUG

var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);

#if DEBUG

config.MapHttpAttributeRoutes();
...

這就像一個魅力,Chrome的必需標題已寫入響應沒有問題。

現在使用Azure Mobile Serives,代碼如下所示:

public static void Register()
{
    ConfigOptions options = new ConfigOptions();

    HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));

    #if DEBUG

    var cors = new EnableCorsAttribute("*", "*", "*");
    config.EnableCors(cors);

    #endif
}

現在我的CORS設置不再起作用,沒有標題存在。 在web.config中添加標題有效,但我更喜歡編程方法。

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
     </httpProtocol>
     ...

有任何想法嗎?

問題是CORS在ASP.NET Web API HttpConfiguration中使用了一個特殊的鈎子,.NET后端過早觸發,因此沒有初始化。

我們會解決這個問題,但這是一個解決方法:

  1. 創建一個派生自ConfigBuilder的類
  2. 覆蓋OnComplete並在那里初始化CORS
  3. 當您調用ServiceConfig.Initialize(...)時切換到使用新的ConfigBuilder

你可以在這里找到一些示例代碼: https//gist.github.com/HenrikFrystykNielsen/6c934be6c6c8fa9e4bc8

希望這可以幫助,

亨里克

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM