【问题标题】:'Error 405 - Method not Allowed' when sending Ajax POST request in ASP.NET Web API在 ASP.NET Web API 中发送 Ajax POST 请求时出现“错误 405 - 方法不允许”
【发布时间】:2017-11-03 01:14:18
【问题描述】:

我正在设计一个简单的 Web API 服务,它接受 html 表单上的输入,将这些输入转换为 json,然后将其发送到 Web API。我正在使用 Visual Studio 2017 中的 ASP.NET Web API。这是我的一些代码,可以帮助我更好地解释:

这是我正在调用的控制器方法:

[HttpPost]
public AssessModel PostAssessment ([FromBody] AssessModel assess)
{
    //Do something
    return assess;
}

这是我正在使用的模型(简化):

public class AssessModel
{
    public Guid capitalassetassessmentid { get; set; }
    public string ownerid { get; set; }

    /*... Many more properties of int, bool, ect here ...*/

    public string name { get; set; }
    public string building { get; set; }
}

最后,这是我在脚本中使用的 ajax 调用:

$("form#my-form").submit(function (e) {
    //First line here takes all fields and puts them in an array
    var formArray = $(this).serializeArray();
    //Second line takes that array and puts it into json format.
    var jsonObj = JSON.stringify(formArray);

    //Send request
    $.ajax({
        type: "POST",
        url: "api/assessment/PostAssessment",
        data: jsonObj,
        contentType: "application/json",
        dataType: "json",
        success: function (jsonObj) {
            $("#results").html(jsonObj.d);
        }
    });
});

所以我在提交表单时调用了这个 ajax 请求。这个 ajax 请求应该将我的 json 作为字符串发送到控制器方法,但是当我按下提交时,我得到一个错误 405 - 不允许方法。我不确定为什么不允许我将 POST 动词发送到带有标签 HttpPost 的控制器方法。

另外值得一提的是,我的表单标签是这样的:

<form id="my-form" class="form" method="POST">

有什么想法吗?我需要澄清什么吗?告诉我。

【问题讨论】:

  • 我会仔细检查您的路线。您确定端点是 api/assessment/postassessment 吗?可能只是 api/assessment。
  • 我只是仔细检查了一遍,并没有解决问题。好主意。
  • 尝试将链接中的代码添加到您的 web api web.config enable-cors.org/server_iis7.html 。不确定这是否是您的问题,但如果可以解决,我可以给您一个详细的答案。

标签: c# asp.net ajax rest asp.net-web-api


【解决方案1】:

试试

var data = {};
var formArray = $('form#my-form').serializeArray();
for(var i in array)
{
    data[formArray[i].name] = formArray[i].value;
}
var jsonObj = JSON.stringify(data);

【讨论】:

  • 我更改了代码,只是在您指定的位置添加了[0],但并没有解决问题。我怀疑这个问题与这个领域有关。也许没有提供与 AssessModel 类很好匹配的 json 数据?
  • 是的,如果您的 json 与评估模型类不匹配,则默认模型绑定器将无法构造您的对象。
  • 所以我的 json 需要有与我的 AssessModel 类的属性完全匹配的 对,否则我会收到这个错误?因为如果是这样的话,那么我们就有一个关于根本原因的公开和关闭案例。
  • 你的 json 需要是 { "ownerid": "someownerid", "name": "somename", "building": "somebuilding" }
  • 啊,这会导致问题,因为目前我的 json 被“包装”在一个数组中,因为 .serializeArray() 给出的原始结构导致 json 将每个对象嵌套在索引中。正如您的原始答案所示,这可能是导致我的问题的原因。感谢您的帮助。
猜你喜欢
  • 2021-09-21
  • 2020-03-19
  • 2020-01-15
  • 2018-02-28
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 2021-09-30
相关资源
最近更新 更多