.NET 中如何解决Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
时间: 2024-06-20 08:02:35 浏览: 293
在.NET中,当处理跨源资源共享(CORS)请求时,可能会遇到预检请求(preflight request,也称为OPTIONS请求)的响应被浏览器的同源策略拒绝,导致"Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request." 错误。这种情况通常发生在你想让一个不同源的服务器返回JSONP数据或者使用CORS允许跨域时。
解决这个问题,你需要在服务器端进行以下配置:
1. **启用CORS**:在WebAPI或ASP.NET Core中,你可以使用`Microsoft.AspNetCore.Cors`库来启用CORS。在Startup.cs文件中的ConfigureServices和Configure方法中添加以下代码:
```csharp
services.AddCors(options =>
{
options.AddPolicy("AllowCrossOrigin", builder =>
{
builder.AllowAnyOrigin(); // 可以根据需求设置更具体的访问策略
builder.AllowAnyMethod();
builder.AllowAnyHeader();
builder.WithCredentials(); // 如果需要支持跨域身份验证
});
});
app.UseCors("AllowCrossOrigin");
```
2. **处理OPTIONS请求**:预检请求需要特殊处理。在`Configure`方法里,为OPTIONS请求创建一个特定的路由,并返回一个简单的响应:
```csharp
app.Use(async (context, next) =>
{
if (context.Request.Method == "OPTIONS")
{
context.Response.StatusCode = 204; // 表示成功,没有内容
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync("OK");
}
else
{
await next();
}
});
```
3. **设置允许跨域的头信息**:在返回响应时,确保包含`Access-Control-Allow-Origin`, `Access-Control-Allow-Methods`, `Access-Control-Allow-Headers`等头信息,告知浏览器你的服务器支持CORS。
确保以上配置后,服务器将允许跨域预检请求,并在需要的时候进行重定向,从而解决错误。
阅读全文