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

标签 c# asp.net cors blazor

我正在尝试做的事情以前工作得很好,我不知道发生了什么,也许他们在浏览器端更新了 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。 但是当我尝试从我的浏览器调用它时,我得到了这个:

Access to fetch at 'http://localhost:15040/api/media/uploadimage' from origin 'http://localhost:5126' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

这是我的 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);

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

最佳答案

您实现它的方式不同于 docs .

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

除非您有充分的理由不这样做,否则最好只选择文档中描述的选项:

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

app.UseCors(MyAllowSpecificOrigins);

关于c# - CORS:对预检请求的响应未通过访问控制检查:它没有 HTTP 正常状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71195398/

相关文章:

c# - longListSelector 项目上的 TiltEffect,windows phone 8

c# - 分页 AD 查询有时会失败

c# - 即使我没有使用 MySQL,ASP.NET 也找不到 MySQL 主机

azure - 如何在生产中的 Nuxt 静态文件响应上添加 CORS header ?

C#创建一个文件,只有创建该文件的用户才能访问它

c# - 与 firebase 集成的 Unity 可在 Unity 编辑器上运行,但不适用于移动设备

c# - 使用 Jquery Post 通过 Web API 下载文件

asp.net - 在四个解决方案中调试一个网站

django - 无法使用位于其他域的 JS 工作文件构造 'Worker'

javascript - Chrome 98 私有(private)网络访问问题与/禁用网络安全 : Request had no target IP address space, 获取资源在本地地址空间中