繁体   English   中英

CORS:对预检请求的响应未通过访问控制检查:它没有 HTTP 正常状态

[英]CORS: Response to preflight request doesn't pass access control check: It does not have HTTP ok status

我正在尝试做的事情以前工作得很好,我不知道发生了什么,也许他们在浏览器端更新了 CORS 政策

我正在尝试将文件上传到我的 ASP.NET 6 API,我的端点如下:

[HttpPost("uploadimage")]
public ActionResult<string> UploadImage(
    [FromForm] IFormFile image,
    [FromForm] int? days = 30,
    [FromForm] MediaType? type = MediaType.AccountImage)
{
    //do things
    return url;
}

如果我尝试在 POSTMan 中调用它,它将正常工作并返回 URL。但是当我尝试从我的浏览器调用它时,我得到这个:

CORS 策略阻止了从来源“http://localhost:5126”访问“http://localhost:15040/api/media/uploadimage”:对预检请求的响应未通过访问控制检查:它没有 HTTP 正常状态。

这是我的 CORS 中间件配置:

ctx.Response.Headers.Add("Access-Control-Allow-Origin", "*");
ctx.Response.Headers.Add("Access-Control-Allow-Methods", "*");
ctx.Response.Headers.Add("Access-Control-Allow-Headers", "append,delete,entries,foreach,get,has,keys,set,values,Authorization,Origin, Content-Type, X-Auth-Token,Accept, X-Requested-With, Access-Control-Request-Method, Access-Control-Request-Headers");

我检查了 postman,标头存在。 我在服务器中设置了一个断点,请求甚至没有被发送到服务器,断点没有命中并且没有调用该方法......

这是我从客户端上传文件的代码:

var form = await file.GenerateImageForm();
var uri = new Uri("HTTP://localhost:15040/api/media/uploadimage");
var req = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    Content = form,
    RequestUri = URI,
};
req.Headers.Add("Allow-control-allow-origin", "*");
var ret = await HttpClient.SendAsync(req);

如何将我的文件上传到我的服务器?

您实现它的方式与文档不同。

根据您提供的大量详细信息,很难说出哪里出了问题,但我最好的猜测是您没有在端点上实施OPTIONS方法,导致它在飞行前失败。

对于文档中描述的选项,最好只使用 go,除非你有充分的理由不这样做:

builder.Services.AddCors(options =>
{
    options.AddPolicy(name: MyAllowSpecificOrigins,
                      builder =>
                      {
                          builder.WithOrigins("http://example.com",
                                              "http://www.contoso.com");
                      });
});

app.UseCors(MyAllowSpecificOrigins);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM