我正在使用MVC.net并将发布数据发送到我的Web API 2控制器。我一直收到500内部服务器错误消息。
如果重要的话,我想发布到另一个域名?我有2个visual studio实例在运行,一个充当客户端,另一个充当服务器。我启用了CORS。
GET可以正常使用此设置,但现在我正试图发布。
'服务器'上的我的控制器是
[HttpPost]
[Route("api/cms/")]
public IHttpActionResult Post([FromBody]int accountId, [FromBody]string content, [FromBody]string paneId, [FromBody]string url)
{
//content
}
我正在使用的“客户端”上的javascript是
function ajaxStart(type, url, data, successDelegate, failDelegate, errorDelegate) {
$.ajax({
type: type.toUpperCase(),
url: url,
contentType: "application/json;charset=utf-8",
data: data,
dataType: "json",
success: function (response) {
successDelegate(response);
},
failure: function (e) {
failDelegate(e.statusText);
},
error: function (e) {
errorDelegate(e.statusText); //always hit
}
})
}
创建数据(我故意使用无意义的字符串,以确保格式没有错误)
var data = JSON.stringify({ accountId: 1, paneId: "_selectedPaneNumber", url: "_url", content: "content" });
Google Chrome开发工具中的“标题”视图显示:
我不知道我做错了什么。
答案 0 :(得分:4)
客户端的javascript看起来很好。问题似乎与ApiController的动作和参数绑定有关。
最多允许一个参数从邮件正文中读取。所以这不起作用:
public IHttpActionResult Post([FromBody]int accountId, [FromBody]string content, [FromBody]string paneId, [FromBody]string url) { ... }
此规则的原因是请求正文可能存储在只能读取一次的非缓冲流中。
来源:Parameter Binding in ASP.NET Web API : Using [FromBody]
考虑在动作服务器端创建模型
public class MyModel {
public int accountId { get; set; }
public string content { get; set; }
public string paneId { get; set; }
public string url { get; set; }
}
并更新行动以期待。
[HttpPost]
[Route("api/cms/")]
public IHttpActionResult Post([FromBody] MyModel model) {
//code removed for brevity
}
答案 1 :(得分:1)
如果你想在身体发送一个字符串,请执行以下操作:
Content-Type: application/x-www-form-urlencoded
=
字符:=5