ASP.NET 5:Azure Web 应用 CORS 在延迟后停止工作

Posted

技术标签:

【中文标题】ASP.NET 5:Azure Web 应用 CORS 在延迟后停止工作【英文标题】:ASP.NET 5: Azure web app CORS stop working after delay 【发布时间】:2015-12-17 14:33:14 【问题描述】:

我在 Azure 中托管了 ASP.NET 5 网站 (dnx451)。 部署后一个小时左右可以正常工作,然后 CORS 功能停止工作。 DI、授权和 MVC 等其他服务仍在运行。

这里是 Startup.cs 代码:

    public void ConfigureServices(IServiceCollection services)
    
        configureCors(services);
        services.AddMvc(options =>
        
                  options.Filters.Add(new ErrorFilter());
        );

   

    private static void configureCors(IServiceCollection services)
    
        services.AddCors();


        services.ConfigureCors(x => x.AddPolicy("allowAll", p=>p.AllowAnyOrigin().
        AllowAnyHeader().AllowAnyMethod()));
    

应用配置:

  public void Configure(IApplicationBuilder app, IApplicationEnvironment env,  ILoggerFactory loggerFactory)
        

            app.UseMiddleware<StaticFileMiddleware>(new StaticFileOptions());
            app.UseErrorPage();

            // Add MVC to the request pipeline.
            app.UseMvc();
            app.UseCors("allowAll");

        

本地版本一直都有 CORS,但 Azure Web 仅在前 1-2 小时内有(取决于使用情况)。我猜当 Azure 重新启动应用程序时,CORS 会消失。

这很奇怪。有没有人有同样的问题?

【问题讨论】:

UseMvc()上方移动app.UseCors("allowAll");有帮助吗? 在这种情况下,我在 Microsoft.AspNet.Cors.Core.CorsService.ApplyResult -> Microsoft.AspNet.Loader.IIS.HeaderCollection.Add(String key, String[ ] value) 移到上面:` app.UseCors("allowAll"); app.UseMvc(); ` 我的意思是 MVC 中间件 (UseMvc()) 通常会结束请求(例如不调用 _next())所以添加 CORS after MVC 可能会导致不应用CORS 中间件。 你应该使用其中之一。因此,[EnableCors] 属性 UseCors() 将给定键添加到内部字典中。这可能解释了重复键异常。 仍然不确定奇怪的行为。但是以正确的顺序使用中间件并且不启用 CORS 两次可能会对您有所帮助。 【参考方案1】:

感谢 Henk,我能够解决问题:

我有[EnableCors] 属性和app.UseCors() 启动调用。删除 UseCors 后,问题就消失了。

然而,当两个选项都到位时,为什么 Cors 暂时工作仍然很奇怪。

更新: 至于https://github.com/aspnet/CORS/issues/36

您无需在此处调用 services.AddCors(),因为 AddMvc 在内部已经这样做了。

【讨论】:

以上是关于ASP.NET 5:Azure Web 应用 CORS 在延迟后停止工作的主要内容,如果未能解决你的问题,请参考以下文章

从托管为 Azure Web App 的 ASP.NET 5 应用程序记录日志

将 ASP.NET Core 5 Web API 发布到 Azure 应用服务

Azure Web App 中的 ASP.NET 5 环境名称

在 Azure 应用服务中发布 ASP.NET Core 5 Web API 应用时出现问题

Azure 中托管的 ASP.Net Web API 高响应时间

在 ASP.Net 5 中的 Azure Web App 中覆盖 config.json 文件中的配置值