在Azure移动服务.net后端启用CORS

本文关键字:后端 启用 CORS net 服务 Azure 移动 | 更新日期: 2023-09-27 17:53:38

我修改了一个ASP。NET Web API 2项目,利用微软Azure移动服务。我正在开发一个Phonegap应用程序,并使用我的桌面Chrome浏览器和本地运行的Azure移动服务进行测试。

在我"转换"我的项目之前,我在我的启动代码中使用这行代码处理CORS(需要NuGet Package Microsoft.AspNet.WebApi.Cors):

#if DEBUG
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
#if DEBUG
config.MapHttpAttributeRoutes();
...

这工作就像一个魅力,所需的标题Chrome已写入响应没有问题。

现在使用Azure Mobile services,代码看起来像这样:
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设置不再工作了,没有头文件存在。在网页中添加标题。配置工作,但我更喜欢编程的方法。

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

任何想法?

在Azure移动服务.net后端启用CORS

问题是CORS在ASP中使用了一个特殊的钩子。.NET Web API HttpConfiguration, .NET后端触发有点太早,所以它没有初始化。

我们会解决这个问题,但这里有一个变通方法:

  1. 创建一个从ConfigBuilder派生的类
  2. 覆盖OnComplete并初始化CORS
  3. 在调用ServiceConfig.Initialize(…)时切换到使用新的ConfigBuilder

您可以在这里找到一些示例代码:https://gist.github.com/HenrikFrystykNielsen/6c934be6c6c8fa9e4bc8

希望有帮助,

Henrik