【问题标题】:Calling web api PUT FromBody "value" always null调用 web api PUT FromBody“值”始终为空
【发布时间】:2015-11-05 09:53:42
【问题描述】:

我正在尝试使用 cURL 调用 ValuesController WebApi 控制器(默认创建)“PUT”方法。无论我做什么,都发送 value="abc"、"abc" 或 "=abc",正如我在其他问题中看到的 POST 方法建议的那样,无济于事。

        // PUT api/values/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody]string value)
        {
        }

我还尝试将 Content-Type 更改为 application/json 和 application/x-www-form-urlencoded,似乎没有任何效果。

curl -H -d "=TEST" -X PUT  http://localhost:30960/api/values/5

这是 ASP.NET 5 Web Api 中的错误,还是我在调用时需要使用不同的格式?

【问题讨论】:

    标签: asp.net-web-api asp.net-core


    【解决方案1】:

    为了让它工作,你需要将它作为一个简单的字符串传递:

    "any value here"
    

    这种行为甚至有一个test

    请记住在发出请求时添加application/json Content-Type 标头。

    我刚刚测试了 PUT 和 POST 请求。

    使用 curl 它是:

    curl -H "Content-Type: application/json" -d "'Test'" -X PUT http://localhost:[port]/api/values/5
    

    【讨论】:

    • 你能用 cURL 调用它吗?
    • 您可能在正文字符串中缺少引号。查看更新
    • @mbudnik - 我可以使用与上面相同的 curl 但使用 Content-Type application/xml - d "'Test'" -X POST url 在定义为 [HttpPost] public 的 OWIN 控制器上接收简单字符串string PostReceive ([FromBody] string data) 最终我想发送有效的 XML,但我认为应该能够发送简单的字符串?
    • @mbudnik - 不起作用我刚试过 -H "Content-Type: application/xml" -d "'test'" -X POST url 不起作用 - [FromBody] 字符串数据是NULL吗?
    【解决方案2】:

    如果您以application/x-www-form-urlencoded 发布数据,则需要删除FromBody 属性。这是 MVC5/WebAPI2 的行为变化。

    如果您将数据发布为application/json,那么您需要FromBody 以及一个可绑定类型。示例:

    public class Person
    {
       public string Name {get; set;}
    }
    

    数据{ "Name" : "James"}

    【讨论】:

    • 我只是希望能够调用来自模板的 Put 方法,并在问题中显示签名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多