通过HTTP调用RESTFUL Web API时出现500 Server错误

时间:2014-06-17 03:58:12

标签: c# asp.net-mvc-4 asp.net-web-api2 restful-url

我的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内部服务器错误?

3 个答案:

答案 0 :(得分:3)

关于[FromBody]的{​​{3}}:

  

最多允许一个参数从邮件正文中读取。

因此,您必须创建一个与您作为正文发布的参数相匹配的模型。

答案 1 :(得分:0)

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

myObject不应该这样吗? (令牌代替toke)

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);
});

答案 2 :(得分:0)

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