据我了解,web api控制器会自动转换json请求并映射参数,所以最好创建一个自定义类
是的,如果随请求传递的数据可以映射到对象,Web API 会将 JSON 或 XML 对象转换为类对象。
如果您希望您的 json 数据进入您的方法的对象中,那么首先定义一个将保存您的 json 数据的类。
public class UserListRequest
{
public int UserId { get; set; }
public string CsvListOfIds { get; set; }
}
稍后修改您的方法签名以接收该类的对象:
[HttpPost]
public List<User> GetUserList(UserListRequest obj)
{
List<User> list = new List<User>();
list.Add(new User { ID = obj.UserId });
list.Add(new User { ID = obj.UserId + 1 }); //something
return list;
}
记得使用[HttpPost]
属性。还应该有一种发布方法,您可以注释掉Post
控制器中已经提供的方法。(如果你想在你的控制器中有多个 post 方法,那么看看这个问题)
您可以通过 jquery 或 Fiddler(或任何您想要的方式)发送请求。我用 Fiddler 对其进行了测试。您可能会看到如何通过 Fiddler 调试 Web API
设置好控制器后,构建项目并在调试模式下启动它。启动 Fiddler 并转到 composer。
将控制器的 URI (来自 IE/浏览器)粘贴到地址栏中,然后选择POST
为 Http 方法。您的 URI 将类似于:
http://localhost:60291/api/values/GetUserList
在 Fiddler Composer -> Request Header 中指定
Content-Type: application/json
在 Fiddler Composer -> Request Body 中,指定您的 JSON
{
"UserId": 1,
"CsvListOfIds": "2,3,4,5"
}
(您也可以使用http://json2csharp.com/从 json 创建您的 C# 模板类)
在控制器中的方法上放置一个调试点,然后在 Fiddler HitExecute
中,您将看到 Visual Studio 中的 Debug 点为 Hit 并且参数中填充了数据。

稍后您可以返回List<User>
,您将在 Fiddler 中看到响应。
[{"ID":1},{"ID":2}]
暂时我创建了一个类User
,如:
public class User
{
public int ID { get; set; }
}
希望这可以帮助。