在C#Web API中处理POST表单数据

时间:2014-03-17 15:09:16

标签: c# asp.net-web-api

我正在使用以下请求调用C#WebAPI:

Request URL: https://devserver/myapp/api/SaveSettings?debug=0
Request Method:POST
Status Code:202 Accepted

Request Headers
...
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
...

Form Data:
config:{"test":"test12"}

Response Headers:
...
Server: Microsoft-IIS/7.5
...

WebAPI应用程序代码是

public class SaveSettingsController : ApiController
{
    [System.Web.Http.HttpGet]
    [System.Web.Http.HttpPost]
    public HttpResponseMessage PostComplex(MyModel update)
    {
        if (ModelState.IsValid)
        {
            return Request.CreateResponse(HttpStatusCode.Accepted,update.config.test);
        }
    }
}

虽然状态代码发送正确(这就是为什么我开始相信这段代码真的被执行了),但内容总是为空,我不知道为什么。我还尝试了一个配置为字符串的模型和

            return Request.CreateResponse(HttpStatusCode.Accepted,update.config);

但无济于事:它仍然返回null。

这是为什么?我做错了什么?

3 个答案:

答案 0 :(得分:1)

如果你在web api中有一个post参数,你可以用[FromBody]属性装饰它,如下所示:

    [System.Web.Http.HttpGet]
    [System.Web.Http.HttpPost]
    public HttpResponseMessage PostComplex([FromBody] MyModel update)
    {
        if (ModelState.IsValid)
        {
            return Request.CreateResponse(HttpStatusCode.Accepted,update.config.test);
        }
    }

答案 1 :(得分:1)

你不必创建一个响应和所有复杂的东西,只需返回任何值,它就会被jsonized

答案 2 :(得分:1)

您请求的内容类型为application/x-www-form-urlencoded,但您发送的是Json数据。将您的内容类型更改为application/json或更改请求正文数据的格式。