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

.NET Core部署staging读取Request.Form报Incorrect Content-Type错误

故障核心

读取HttpContext中的表单数据时报错Error attempting to read form data from HttpContext,属于典型的本地运行正常、部署后异常类问题。

问题场景

现有一个.NET Core Web项目,前端添加如下JavaScript代码绑定点击事件,发起POST请求提交resortId参数:

$trigger.on('click', function () {
   const $button = $(this);
   const resortId = $button.data('resortId');
            
   $.post(url, { resortId: resortId }, function (response) {
       // 后续业务逻辑
   });
});

经确认resortId参数可正常传递,对应后端控制器接口方法如下:

[HttpPost]
[Route("wishlist/add")]
public JsonResult Add()
{
    var response= _repository.Add(Request, HttpContext.Session);
    return Json(response);
}

该方法内部调用如下工具方法读取表单中的resortId参数:

private static int GetId(HttpRequest request)
{
  var form = request.Form;
  int.TryParse(form["resortId"], out var resortId);
  return resortId;
}
异常表现

代码在var form = request.Form;(Repository.cs第82行)处抛出异常,该代码逻辑本身无明显问题,整套代码在本地开发环境运行完全正常,部署到staging服务器后就会触发故障。
完整堆栈跟踪如下:

Message: "Incorrect Content-Type: "
Inner Exception: ""
StackTrace:
"   at Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()
   at Microsoft.AspNetCore.Http.DefaultHttpRequest.get_Form()
   at myproject.GetResortId(HttpRequest request) in Repository.cs:line 82
   at Add(HttpRequest request, ISession session) in Repository.cs:line 31
   at myproject.Controllers.Controller.Add() in Controller.cs:line 28
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
--- End of stack trace from previous location where the exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location where the exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location where the exception was thrown ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)"
排查过程
  • 曾尝试改用jQuery ajax方法发起请求,显式指定Content-Type,但问题未解决。
  • staging服务器目前未配置SSL证书,最初曾出现405响应,曾怀疑故障和证书缺失有关。

第一次更新

重构接口代码,新增强类型请求对象WishListAddRequest,将控制器方法修改为直接接收该参数:

[HttpPost]
[Route("wishlist/add")]
public JsonResult Add(WishListAddRequest request)
{
   // 后续业务逻辑
}

新逻辑从Session中获取集合,用传入参数更新集合,该实现本地运行完全正常,但staging环境接口直接返回405状态码。

第二次更新

最终通过重构代码解决问题:移除JavaScript异步提交逻辑,改用原生HTML表单直接提交到对应控制器,不再依赖JS发起请求。曾尝试给staging站点配置SSL证书排除相关影响,但遇到网络问题未配置成功。推测故障原因是服务器配置了HTTP到HTTPS的重定向规则,但本身未部署SSL证书,导致AJAX请求触发CORS限制,该推测暂未验证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:12:28