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

Posted

技术标签:

【中文标题】在 Azure Web 应用程序中为 Web API 启用 CORS【英文标题】:Enabling CORS for Web API in Azure Web Apps 【发布时间】:2015-09-24 21:59:12 【问题描述】:

我已将一个 Web API 项目部署到 Azure Web 应用。我正在尝试从 angularjs 应用程序向 API 发出 $http.get 请求。但它给出了一个 CORS(跨域)异常,尽管我在我的 Web API 启动配置中启用了它

 app.UseCors(CorsOptions.AllowAll);

我想为 Azure Web 应用启用 CORS,我相信这会解决问题

编辑 http://nearestbuyweb.azurewebsites.net/ 这是 Web 应用程序的 URL。它试图访问发生异常的http://nearestbuyapi.azurewebsites.net/api/MenuBar。

我认为 Azure Web App 不可能。 MSDN Question

请帮忙!

【问题讨论】:

澄清一下,当您的站点尝试对第二个站点进行 API 调用时,您会收到 CORS 异常,还是在第二个站点尝试对您的站点进行 API 调用时收到 CORS 异常?在您的站点上启用 CORS 只会启用第一种情况。 当我从我的 Web 项目访问 Web api 时出现错误。我想基本上为 Azure Web 应用启用 CORS 【参考方案1】:
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <clear />
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
            <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

【讨论】:

例如使用 fiddler 或 postman 尝试请求,并检查它是否有效。我正在使用这些配置并且工作正常。 当我在没有来源的情况下访问它时,即在 chrome 中输入 URL 以及 fiddler 它可以工作。【参考方案2】:

您需要使用 web.config 删除 IIS 中的选项处理程序。 http://eugeneagafonov.com/post/38312919044/iis-options-cors-aspnet-webapi-en

【讨论】:

我正在使用 Azure Web App,我们无法修改 IIS 您正在编辑 web.config 而不是直接修改 IIS。你点击链接了吗?顺便说一句,这就是我在 Azure(网络应用程序)中的工作方式。【参考方案3】:

我在 Azure 中使用了 CORS:

WebApiConfig.cs:

public static class WebApiConfig

    public static void Register(HttpConfiguration config)
    
        // Web API configuration and services
        config.EnableCors();

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "PublicApi",
            routeTemplate: "api/v1/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );

    

Web.config:

  <system.webServer>
  <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>

【讨论】:

感谢@buKaneer,即使我正在做相同的配置。它在我的本地机器上运行良好(API 和 Web 托管在 IIS 中作为单独的应用程序),但是当我发布到 azure 时它不起作用。 您是否将 WebApi 部署到 Azure Web 应用或移动服务或云服务? 它是一个托管在 Azure 上的网站,这里是链接 get-json.azurewebsites.net CORS 调用是从这里进行的 codepen.io/collection/XzVOeX 所以 get-json.azurewebsites.net 托管在 Azure 上,但是对不在 Azure 中的 codepen 进行 CORS 调用?对我来说,需要对部署到 azure 的 Web Api 进行 CORS 调用 您可以从任何网站进行 CORS 调用以获取 JSON(托管在 azure 上)。【参考方案4】:

注意:您使用 CORS 设置让其他网站访问您网站的 API。不访问其他站点的 API。

根据您的 cmets,当您尝试从您的站点发出外部请求时,您似乎遇到了 CORS 错误。这正是 CORS 应该阻止的行为。

要让错误消失,您必须在您尝试访问的 API 的站点上应用 CORS 配置设置

在您的情况下,您希望确保在 http://nearestbuyapi.azurewebsites.net 站点上应用配置更改。不在http://nearestbuyweb.azurewebsites.net/

【讨论】:

这就是我正在做的@Zain “这正是 CORS 应该阻止的行为。” - 阻止浏览器查看响应的不是 CORS,而是同源策略 (SOP)。 CORS 基本上只是一堆可以用来放松 SOP 的标头。【参考方案5】:

对不起各位,

此问题仅发生在我的公司网络中。谷歌搜索后,我发现公司网络可以禁用 CORS 请求。在这里找到这个link

【讨论】:

以上是关于在 Azure Web 应用程序中为 Web API 启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure 数据工厂的 Web 活动中为 POST 请求传递正文中的内容

如何在 docker (Azure Web App) 中为 Python 导入 cv2?

生成 ASP 应用程序并将其部署到 Azure Web 应用程序失败

无法在 Azure Web App 上为来自 DockerHub 的容器部署 Windows 容器

在 Azure 中托管 WebApi 的推荐方式

将 Azure Web 应用程序移入新的 Azure 应用程序服务计划?