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

本地C#调用IIS部署的.NET Core 7 Web API POST请求返回空串问题

IIS部署的.NET Core 7 Web API POST请求无效果排查

问题情况

  • 本地C#代码调用IIS上的Web API,GET请求正常,但POST请求返回200状态码却无响应体,且未触发API内的数据变更逻辑
  • PostMan和前端AJAX调用该POST端点完全正常,能正常触发数据变更
  • 本地运行API时,相同C#代码调用本地API的POST请求工作正常

客户端POST请求代码

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "{URL}");
request.Headers.Add("Authorization", "Bearer {API_TOKEN}");
client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
var content = new StringContent("{\r\n  \"State\": \"PA\",\r\n  \"Zip\": \"19087\",\r\n  \"Country\": \"United States\"\r\n}", null, "application/json");
request.Content = content;
var response = Task.Run(async () => await client.SendAsync(request)).Result;
response.EnsureSuccessStatusCode();
var ret = Task.Run(async () => await response.Content.ReadAsStringAsync()).Result;

API控制器POST端点代码

[HttpPost]
[ProducesResponseType(typeof(Venue), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public IActionResult Post([FromBody] Venue Venue)
{
    if (Venue == null)
        return BadRequest();

   Venue venue = _venueListDAL.UpsertVenue(Venue);
    return venue == null ? NotFound(null) : Ok(venue);
}

已尝试的序列化方式

var data = JsonConvert.SerializeObject(Venue);
request.Content = new StringContent(data, null, "application/json");

排查解决建议

  1. 指定UTF-8编码:StringContent默认使用ASCII编码,可能导致API解析请求体失败,修改为:
    var content = new StringContent(jsonStr, System.Text.Encoding.UTF8, "application/json");
    
  2. 改用全异步写法:用.Result阻塞异步调用可能引发死锁或吞掉异常,换成异步方法执行:
    using var client = new HttpClient();
    client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
    var request = new HttpRequestMessage(HttpMethod.Post, "{URL}");
    request.Headers.Add("Authorization", "Bearer {API_TOKEN}");
    var content = new StringContent(jsonStr, System.Text.Encoding.UTF8, "application/json");
    request.Content = content;
    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();
    var ret = await response.Content.ReadAsStringAsync();
    
  3. 查看IIS站点日志:在IIS中找到对应站点的日志文件,检查该POST请求的详细记录,看是否存在重定向、参数解析失败等隐性问题
  4. 开启API模型绑定日志:在API的appsettings.json中添加日志配置,查看模型绑定是否失败:
    {
      "Logging": {
        "LogLevel": {
          "Microsoft.AspNetCore.Mvc.ModelBinding": "Debug"
        }
      }
    }
    
  5. 抓包对比请求差异:用Fiddler或Charles抓取C#代码、PostMan、AJAX的请求包,对比头信息、请求体格式、编码等是否有差异(比如Authorization头格式、Content-Length是否正确)
  6. 检查IIS规则:确认IIS是否对POST请求设置了URL重写或其他拦截规则,导致请求被转发到无效端点
  7. 验证Token权限:虽然GET请求正常,但需确认POST请求的Token是否具备对应操作权限,或Token在传输中是否被截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:40:37