【问题标题】:Enable CORS In MVC Controller在 MVC 控制器中启用 CORS
【发布时间】:2018-02-01 23:12:39
【问题描述】:

我需要通过localhost:9000访问localhost:5002/api/login

我已经尝试了几乎所有在线可用的解决方案。 但我不断收到以下错误。

如何在请求的资源上显示“Access-Control-Allow-Origin”。

XMLHttpRequest 无法加载 localhost:5002/api/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'localhost:9000' 因此不允许访问。

我已尝试将此添加到 Web.config

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

并且在服务器端 StartUp.cs 文件中我还添加了以下内容

public void ConfigureServices(IServiceCollection 服务)

    {  
        services.AddCors(options =>

        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });
        services.AddMvc();
    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IUowProvider uowProvider)

    {
        app.UseCors("CorsPolicy");
        app.UseMvc();
    }

【问题讨论】:

  • 这是 Web API 2 吗?
  • 如果您简要列举您尝试过的内容会很有帮助。
  • 它不是 Web API 2。我们使用的是 MVC 控制器。

标签: asp.net-mvc


【解决方案1】:

第一步: 请将以下代码保留在 webconfig 和部分内:

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

第二步: 我们在 Global.asax 类中添加了 Application_BeginRequest 方法。通常,该方法检查 Header 的所有键。如果它包含“Origin”并且Request HttpMethod是“OPTIONS”,则结束所有当前缓冲的输出到客户端

protected void Application_BeginRequest()
    {
        if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
        {
            Response.Flush();
        }
    }

【讨论】:

  • 我已经尝试了很多方法来在我的 MVC 应用程序中启用 Cors,并且将此代码添加到 Application_BeginRequest 是最终为我解决的问题。非常感谢。
【解决方案2】:

通常您应该能够将 CORS 配置添加到您的 WebAPI 配置或 web.config。

对于 WebAPI 配置,您应该指定以下内容:

config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

web.config 中应该是这样的:

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

当然,这允许 all 来源,因此您必须根据您的情况将其更改为 localhost:9000。请记住,不同的端口是不同的来源,因此仅指定localhost 是不够的,还应添加端口!

【讨论】:

  • 这意味着我还必须专门添加 localhost:9000?
  • 是的,在您的情况下,它可能看起来像 app.UseCors(builder =&gt; builder.WithOrigins("http://localhost:9000"));&lt;add name="Access-Control-Allow-Origin" value="http://localhost:9000" /&gt;,而不是 *(星号)。可以在 MS 文档站点上找到一篇关于它的好文章:docs.microsoft.com/en-us/aspnet/core/security/cors
  • 我似乎仍然无法修复它。另外,我们没有 WebAPI 配置。我们正在使用 MVC 控制器。
猜你喜欢
  • 2019-08-10
  • 2020-01-24
  • 2020-09-22
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
相关资源
最近更新 更多