在 Azure 移动服务中启用 CORS - OPTIONS 未授权

Posted

技术标签:

【中文标题】在 Azure 移动服务中启用 CORS - OPTIONS 未授权【英文标题】:Enable CORS in Azure Mobile Services - OPTIONS not authorized 【发布时间】:2014-07-30 15:01:12 【问题描述】:

我正在使用 Azure 移动服务创建 .Net Web 服务。服务本身运行良好,但我想启用 CORS。

我的 Global.asax 包含:

protected void Application_BeginRequest(object sender, EventArgs e)

    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
    if (HttpContext.Current.Request.HttpMethod != "OPTIONS") return;
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,POST");
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers",
        "Authorization, Origin, Content-Type, Accept, X-Requested-With,x-zumo-application,x-zumo-installation-id");
    HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
    HttpContext.Current.Response.End();

我的 WebAPIConfig.cs 包含:

    public static void Register()
    
        ConfigOptions options = new ConfigOptions();
        HttpConfiguration config = ServiceConfig.Initialize(new ConfigBuilder(options));

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

        config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/controller/action");
    

我的请求/响应:

OPTIONS http://********.azure-mobile.net/API/MyLogin?username=username&password=password&email=testtest%40example.com&_=140191793307 HTTP/1.1
Host: ********.azure-mobile.net
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: null
Access-Control-Request-Method: GET
Access-Control-Request-Headers: content-type,x-zumo-application,x-zumo-installation-id
Connection: keep-alive
Cache-Control: max-age=0


HTTP/1.1 401 Unauthorized
Content-Length: 81
Content-Type: application/xml; charset=utf-8
Server: Microsoft-IIS/8.0
WWW-Authenticate: Basic realm="Service"
X-Powered-By: ASP.NET
Set-Cookie:    ARRAffinity=50b9234b61ec5f663e817ec57c430ca7b921bbcd842719dfc2bdc27374adea87;Path=/;Domain=********.azure-mobile.net
Date: Wed, 04 Jun 2014 21:38:56 GMT

<Error><Message>Authorization has been denied for this request.</Message></Error>

【问题讨论】:

【参考方案1】:

这里有一种在移动服务中启用 CORS 的解决方法:

https://gist.github.com/HenrikFrystykNielsen/6c934be6c6c8fa9e4bc8

您不需要 Application_BeginRequest 部分——请求/响应不通过该代码路径——它们通过 OWIN 管道。好消息是你只需要上面的要点就可以开始了。

希望这会有所帮助!

亨里克

【讨论】:

这对我来说非常有效。非常感谢您抽出宝贵时间发布此内容! CORS 现已融入产品,不再需要解决方法,请see here。

以上是关于在 Azure 移动服务中启用 CORS - OPTIONS 未授权的主要内容,如果未能解决你的问题,请参考以下文章

响应标头中的 Azure 无服务器功能启用 CORS

在 Azure 上为 .NET Web Api 启用 CORS

在带有 PKCE 的 OAuth 授权流中使用时如何在 Azure 应用注册中启用 CORS?

在 Azure Web 应用程序中为 Web API 启用 CORS

在 Azure Active Directory 上启用 CORS

使用Azure功能启用CORS通配符子域