在c# WebAPI中处理POST表单数据

本文关键字:POST 表单 数据 处理 WebAPI | 更新日期: 2023-09-27 17:50:42

我正在用以下请求调用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。

为什么会这样?我做错了什么?

在c# WebAPI中处理POST表单数据

如果你在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);
        }
    }

你不需要创建响应和所有复杂的东西,只要返回任何值,它就会被json化

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