我有一个控制器,
[Route("api/[controller]")]
public class ResponsesController : Controller
{
[HttpPost]
public void Data([FromBody] MyModel value)
{
var temp = value;
}
}
[JsonObject]
[Serializable]
public class MyModel
{
public string Url { get; set; }
}
我正在使用chrome开发者控制台发布它,
function post_to_url(path, params, method) {
method = method || "post";
var form = document.createElement("form");
//Move the submit function to another variable
//so that it doesn't get overwritten.
form._submit_function_ = form.submit;
form.setAttribute("Content-Type", "application/json;charset=utf-8");
form.setAttribute("method", method);
form.setAttribute("action", path);
for(var key in params) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form._submit_function_(); //Call the renamed function.
}
var j = {"Url":"hello"};
post_to_url("http://localhost:63984/api/responses", j );
我得到的错误是415,但我不确定有什么问题,我实际上想要收到myModel []
答案 0 :(得分:0)
来自MDN
在由HTML表单提交产生的POST请求中,请求的Content-Type由元素上的enctype属性指定。
您应该从form.setAttribute("Content-Type", "application/json;charset=utf8")
中删除post_to_url
。如果您要以这种方式提交数据,则可能必须将服务配置为接受URL编码的表单数据。虽然这很简单,但它可以开箱即用。
答案 1 :(得分:0)
415表示“不支持的媒体”。在您的情况下,您将内容类型设置为JSON,但您实际上并未发布JSON,而是发布名称为“Url”且值=“hello”的隐藏字段。