为什么我这个请求得到415

时间:2017-11-09 14:56:04

标签: javascript c# asp.net-web-api2 asp.net-core-2.0

我有一个控制器,

[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 []

2 个答案:

答案 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”的隐藏字段。