.NET 5 Blazor WASM调用API遇CORS及大请求失败问题求助
使用.NET 5后端+Blazor WASM前端调用Post API时,浏览器返回CORS错误:
Access to fetch at 'https://localhost:44328/Company/' from origin 'https://localhost:5000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
在WebAPI控制器层设置断点,但请求未到达。CORS配置看似正常:
Startup.cs 中间件配置
app.UseCors("AllowAll");
Startup.cs 服务配置
services.AddCors(o => o.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }));
前端请求代码:
public async Task<CompanyModel> SaveCompanyDetails(CompanyModel companyModel) { CompanyModel savedCompany = null; var entityjson = new StringContent(JsonConvert.SerializeObject(companyModel ), Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync(string.Empty, entityjson); if (response.IsSuccessStatusCode) { savedCompany = JsonConvert.DeserializeObject<CompanyModel>(await response.Content.ReadAsStringAsync()); } return savedCompany; }
排查后确认是请求内容过大(字节数达30026250):当CompanyModel中Employees列表数量超过80时,触发TypeError: Failed to Fetch异常;数据量低于30MB时请求可正常到达断点。疑问:StringContent是否存在大小限制?如何提升该限制?
StringContent本身无大小限制
StringContent仅作为HTTP请求内容的包装类,本身没有内置大小限制,问题根源在于.NET WebAPI、Kestrel或IIS的默认请求大小限制。调整.NET WebAPI的请求体大小限制
在Startup.cs的ConfigureServices中配置MVC的最大请求体大小:
services.AddControllers(options => { // 设置最大请求体大小为50MB(可按需调整) options.MaxRequestBodySize = 52428800; // 50*1024*1024 });
- Kestrel服务器额外配置
若使用Kestrel作为服务器,在Program.cs中添加请求大小限制:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .ConfigureKestrel(options => { // 设置Kestrel允许的最大请求体大小 options.Limits.MaxRequestBodySize = 52428800; // 50MB }); });
- IIS部署场景的配置调整
若后端部署在IIS上,需修改web.config添加请求限制:
<system.webServer> <security> <requestFiltering> <!-- 设置最大请求大小为50MB --> <requestLimits maxAllowedContentLength="52428800" /> </requestFiltering> </security> </system.webServer>
- 关于CORS错误的误导性说明
当请求体超过服务器限制时,服务器会直接拒绝请求,不会返回CORS响应头,导致浏览器抛出CORS错误——这是典型的"表象错误",实际问题为请求大小超限。
内容的提问来源于stack exchange,提问作者Yzak

