我的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
创建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内部服务器错误?
答案 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方面的一些轻微调整中,我设法让它工作得很好。因此,请检查您的回复 - 您可能会获得有关错误的更多详细信息。