You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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是否存在大小限制?如何提升该限制?

解决方案
  1. StringContent本身无大小限制
    StringContent仅作为HTTP请求内容的包装类,本身没有内置大小限制,问题根源在于.NET WebAPI、Kestrel或IIS的默认请求大小限制。

  2. 调整.NET WebAPI的请求体大小限制
    在Startup.cs的ConfigureServices中配置MVC的最大请求体大小:

services.AddControllers(options =>
{
    // 设置最大请求体大小为50MB(可按需调整)
    options.MaxRequestBodySize = 52428800; // 50*1024*1024
});
  1. 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
                      });
        });
  1. IIS部署场景的配置调整
    若后端部署在IIS上,需修改web.config添加请求限制:
<system.webServer>
  <security>
    <requestFiltering>
      <!-- 设置最大请求大小为50MB -->
      <requestLimits maxAllowedContentLength="52428800" />
    </requestFiltering>
  </security>
</system.webServer>
  1. 关于CORS错误的误导性说明
    当请求体超过服务器限制时,服务器会直接拒绝请求,不会返回CORS响应头,导致浏览器抛出CORS错误——这是典型的"表象错误",实际问题为请求大小超限。

内容的提问来源于stack exchange,提问作者Yzak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:59:58