【WebApi】WebApi的Post方法的参数问题和C#调用WebApi返回400错误

时间:2025-01-25 08:17:25

学习WebApi时间较短,在一个项目中需要向WebApi发送数据,但是使用C#调用WebApi(Post)时总返回400错误,找了很久,总以为是调用方法有问题,后来发现其实是WebApi中,Post方法参数的问题。下面是测试代码:

实体:

public class Standard
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Gender { get; set; }
        public string Hobby { get; set; }
    }

方法:

private void Send()
{
    Standard s = new Standard
    {
        Name = "tt",
        Age = 24,
        Hobby = "test",
        Gender = "1"
    };
    string json = (s);
    string url = "http://localhost:2374/api/values";
    HttpWebRequest request = (HttpWebRequest)(url);
     = false;
     = "POST";
     = "application/json";
    try
    {
		//GET方法没有写入流这一部分
        using (StreamWriter writer = new StreamWriter(()))
        {
            (json);
        }
        HttpWebResponse response = null;
        try
        {
            response = (HttpWebResponse)();
        }
        catch (WebException e)
        {
            response = (HttpWebResponse);
        }
    }
    catch(Exception e)
    {
        throw e;
    }
}

WebApi:

[HttpPost]
public async Task Post([FromBody] Standard value)
{
	//……
}

WebApi这里要注意两点:
1、参数需要加[FromBody]帽子,不然取不到值;
2、因为发送方法,发送的是一个经过json序列化的实体,所以Post方法的参数也必须是对应的实体,Post方法在接收到值时,会自动按参数类型反序列化。我之前这个参数写的是string类型,每次调用都返回400错误,提示解析时遇到意外字符,即“{”。

一个小错误,但是之前找了很久都没有人提,这里写个博客记录一下。