C# 通过HTTP调用RESTFUL Web API时出现500服务器错误

C# 通过HTTP调用RESTFUL Web API时出现500服务器错误,c#,asp.net-mvc-4,asp.net-web-api2,restful-url,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 = fal

我的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为
Method1
Method2
创建RESTfulWebAPI时,我得到一个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内部服务器错误?

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

myObject
不应该是这样吗?(代币代替托克)

此外,您不需要对JSON对象进行字符串化。如果您应该这样工作:

$.post(uri, myObject).done(function (data) {
    $('#result').text(data);
})
.fail(function (jqXHR, textStnatus, err) {
    $('#result').text('Error: ' + err);
});
从有关的
[FromBody]

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


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

我也有同样的错误,我花了相当长的时间才找出导致错误的原因。 最简单的方法是从浏览器中检查响应消息。在IE11中,您可以按F12,进入网络选项卡并开始录制。然后在你打完电话后,停止通话并回顾通话。
在我的例子中,我发现我返回的消息未能序列化,因为我将要接收的对象中存在循环链接。所以,在WebAPI方面做了一些细微的调整后,我成功地使它工作得很好。因此,请检查您的回复-您可能会得到有关错误的更多详细信息。

这是我使用该服务的客户端代码中的一个输入错误。我确实在WebApiConfig.cs中将操作定义为
api/{controller}/{action}
也许我应该阅读文档…:)。我能够通过500内部服务器错误,但现在我在JSON对象中发送的所有值都没有被发送过来。我能够使用
System.Net.WebRequest
对象从Xamarin移动应用程序获取restful Web API,但无法通过HTML/jQuery调用使其工作。必须将内容类型设置为application/json。
$.post(uri, myObject).done(function (data) {
    $('#result').text(data);
})
.fail(function (jqXHR, textStnatus, err) {
    $('#result').text('Error: ' + err);
});