通过HTTP调用RESTFUL Web API时服务器错误

本文关键字:服务器 错误 API Web HTTP 调用 RESTFUL 通过 | 更新日期: 2023-09-27 18:08:49

我的WEB API控制器的结构如下:

public class MyController : ApiController
{
   [System.Web.Http.HttpPost]
   public bool Method1([FromBody] int id, [FromBody] string token, [FromBody] string deviceID, [FromBody] string username)
   {
      bool returnValue = false;
      //do code business logic here
      return returnValue;
   }
   [System.Web.Http.HttpPost]
   public bool Method2([FromBody] int id, [FromBody] string token)
   {
      bool returnValue = false;
      //do code business logic here
      return returnValue;
   }
}

当我尝试通过HTTP为Method1Method2制作RESTFUL Web API时,我得到一个500内部服务器错误。

如果我从任何方法中删除输入参数,我就能够使Web API没有错误。

我通过。net测试方法对控制器进行了单元测试,逻辑没有产生异常。

我已经添加了一个名为Get的额外方法,没有参数,并且能够在没有任何错误的情况下使用服务。

下面是我尝试使用jQuery在JavaScript中使用web API的代码片段:

var uri = "http://127.0.0.1/MyWebApi/api/mycontroller/method2";
var myObject =
{
    id: $('#id').val(),
    token: $('#token').val()
};
$.post(uri, JSON.stringify(myObject)).done(function (data) {
    $('#result').text(data);
})
.fail(function (jqXHR, textStatus, err) {
    $('#result').text('Error: ' + err);
});

是什么导致我在初始API控制器结构上得到500内部服务器错误?

通过HTTP调用RESTFUL Web API时服务器错误

来自[FromBody]的文档:

最多允许从消息体中读取一个参数。

所以你必须创建一个与你作为主体发布的参数相匹配的模型

考虑到您正在使用的HTTP方法(POST),这个500错误可能是因为它没有在服务器中找到与给定参数匹配的Action。

myObject不应该是这样的吗?(用token代替token)

var myObject =
{
    id: $('#id').val(),
    token: $('#token').val()
};

同样,您不需要对JSON对象进行字符串化。它应该是这样工作的:

$.post(uri, myObject).done(function (data) {
    $('#result').text(data);
})
.fail(function (jqXHR, textStnatus, err) {
    $('#result').text('Error: ' + err);
});

我也有同样的错误,我花了很长时间才弄清楚是什么原因导致的。最简单的方法是从浏览器中检查您的响应消息。在IE11中,您可以按F12,进入网络选项卡并开始录制。然后,在你打电话之后,停止它并回顾电话。在我的例子中,我发现由于将要接收的对象中的循环链接,我返回的消息无法序列化。因此,在Web API方面进行了一些轻微的调整,我设法让它工作得很好。因此,检查您的响应-您可能会得到更多关于错误的详细信息。