【问题标题】:How to handle OPTION header in dot net core web api如何处理 dot net core web api 中的 OPTION 标头
【发布时间】:2019-04-28 00:42:12
【问题描述】:

在使用 ajax 调用测试我的 dot net core web api 时,当我使用 fiddler 进行监视时,chrome 在请求标头中用 Option 替换了我的 get。我按照Enable OPTIONS header for CORS on .NET Core Web API 此处的代码进行操作,但仍然无法正常工作。我如何实现这一目标?这是我的启动文件

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
    });

    services.AddCors(options => options.AddPolicy("AllowCors", p => 
        p.AllowAnyOrigin().AllowAnyMethod().AllowCredentials().AllowAnyHeader()));

    services.Configure<IISOptions>(options =>
    {
        options.ForwardClientCertificate = false;
    });

    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseOptions();
    app.UseCors("AllowCors");
    app.UseDefaultFiles();
    app.UseStaticFiles();
    app.UseCookiePolicy();
    app.UseHttpsRedirection();

    app.UseMvc(routes =>
    {
        routes.MapRoute(name: "default", template: "{controller=Account}/{action=Login}/{id?}");
    });
}

【问题讨论】:

  • 你添加了解决方案中解释的中间件类吗?
  • 您是否在相关控制器中添加了AllowCors 策略?
  • 我添加了中间件类并将其包含在我的 startup.cs\
  • 我也在相关控制器上添加了 AllowCors
  • “不工作”是什么意思?你得到了什么错误?你也在 IIS 中托管这个吗?

标签: c# .net-core asp.net-core-webapi


【解决方案1】:

这应该启用 OPTION 标头

          app.UseCors(builder => builder.WithOrigins("http://example.com")
          .AllowAnyHeader()
          .AllowAnyMethod()
          .AllowCredentials());

如果您不想启用任何标头/方法或凭据,请满足您的需求。

【讨论】:

    【解决方案2】:

    如果你在 IIS 上托管,一个可能的原因是你得到这个是因为 IIS 阻塞了 OPTIONS 动词。

    一个明显的迹象是您在OPTIONS 请求期间收到404 错误。

    要解决此问题,您需要明确告诉 IIS 阻止 OPTIONS 请求。

    转到请求过滤:

    确保允许 OPTIONS:

    或者,只需使用以下设置创建 web.config

    <system.webServer>
        <security>
            <requestFiltering>
                <verbs>
                    <remove verb="OPTIONS" />
                    <add verb="OPTIONS" allowed="true" />
                </verbs>
            </requestFiltering>
        </security>
    </system.webServer>
    

    【讨论】:

    • 目前,API 未在 IIS 上发布。一切都还在visual studio中......我可以在我仍在本地测试而不发布之前添加配置文件吗?
    • @Mcbaloo 这没有意义,你应该不需要在 localhost 上设置 CORS。
    • 我如何在不将其部署在 IIS 上的情况下使用我的 Web 应用程序测试 Api。 Api 和 Web 应用程序在一起
    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 2020-04-12
    • 2021-10-28
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多