gpt4 book ai didi

c# - 在 .NET Core Web API 上启用 CORS 的 OPTIONS header

转载 作者:行者123 更新时间:2023-12-03 03:02:29 24 4
gpt4 key购买 nike

我在 Stackoverflow 上找不到解决方案后解决了这个问题,因此我在这里分享我的问题并在答案中分享解决方案。

使用 AddCors 在我的 .NET Core Web Api 应用程序中启用跨域策略后,它仍然无法在浏览器中工作。这是因为浏览器(包括 Chrome 和 Firefox)将首先发送 OPTIONS 请求,而我的应用程序仅响应 204 No Content。

最佳答案

向您的项目添加一个中间件类来处理 OPTIONS 动词。

using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Hosting;

namespace Web.Middlewares
{
public class OptionsMiddleware
{
private readonly RequestDelegate _next;

public OptionsMiddleware(RequestDelegate next)
{
_next = next;
}

public Task Invoke(HttpContext context)
{
return BeginInvoke(context);
}

private Task BeginInvoke(HttpContext context)
{
if (context.Request.Method == "OPTIONS")
{
context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { (string)context.Request.Headers["Origin"] });
context.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "Origin, X-Requested-With, Content-Type, Accept" });
context.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" });
context.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" });
context.Response.StatusCode = 200;
return context.Response.WriteAsync("OK");
}

return _next.Invoke(context);
}
}

public static class OptionsMiddlewareExtensions
{
public static IApplicationBuilder UseOptions(this IApplicationBuilder builder)
{
return builder.UseMiddleware<OptionsMiddleware>();
}
}
}

然后将 app.UseOptions(); 添加为 Startup.cs 中配置方法的第一行。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseOptions();
}

关于c# - 在 .NET Core Web API 上启用 CORS 的 OPTIONS header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com