【问题标题】:ASP.NET Core jQuery POST - Incorrect Content-Type despite correctly formatted headersASP.NET Core jQuery POST - 尽管标题格式正确,但内容类型不正确
【发布时间】:2022-01-14 16:17:27
【问题描述】:

我研究了类似的主题,例如 this onethis one,并确定这值得拥有自己的主题,因为我在一个小时的研究中找不到任何帮助。

我正在尝试从 jQuery 请求向 ASP.NET Core 主机发送 POST 请求。这就是我在前端格式化我的 POST 请求的方式:

            $.ajax({
            url: "/Merge",
            type: "POST",
            contentType: 'application/x-www-form-urlencoded',
            datatype: "json",
            data: {
                "example": "examplecontent"
            },
            success: function (data) {
                alert(data);
            }
        });

这是我在后端提取它以进行测试的方式:

    [HttpPost]
    public IActionResult Index()
    {
        var x = HttpContext.Request.Form;
        Dictionary<string, string> exampleDict = new();
        //exampleDict.Add("Testing", HeaderElem);
        JsonResult result = new(exampleDict);
        return result;
    }

尽管包含完整的标头,但我在后端收到此错误,声称我有一个“不正确的内容类型”:

我的请求可能有什么问题?

【问题讨论】:

  • 作为实际问题的旁白——你为什么首先使用HttpContent.Request.Form? MVC 旨在与请求中的模型一起使用——这就是为什么我们有 ModelBinder 将请求参数绑定到具体对象的原因。为什么不使用它呢?
  • @RoryMcCrossan 我已经使用 MVC 标准在线跟踪食谱花了一天半的时间,但无济于事。我已经构建了模型,但我选择不使用它们,直到我弄清楚我的 Post 请求有什么问题。解决此问题后,我将重新使用模型。
  • 我只是尝试使用一个全新的 ASP.NET Core MVC 项目(针对 .NET 5)进行重现,并且效果很好。你的控制器(我假设MergeController)是否继承自Controller?例如public class MergeController : Controller
  • @EthanHill 在这种情况下,这个问题听起来像是您在某处的配置中犯了错误,因为代码将使用默认配置。
  • 您在 ajax 请求中发布到“/Merge”。但是您向我们展示的控制器操作是针对 Index 的。您是否在 ajax 和您正在调试的操作之间进行某种重定向?

标签: c# jquery asp.net-mvc asp.net-core .net-core


【解决方案1】:

你必须修正这个动作

[Route("~/Merge")]
public IActionResult Index(string example)
{
       return Ok ( new { example = example } );
}

【讨论】:

  • 我已经检查过了,虽然这在 Insomnia 中有效,但出现与上面相同的错误。我将调查我的配置,看看是否还有其他问题。
猜你喜欢
  • 2018-07-18
  • 2018-09-03
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2013-12-12
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多