使用web api,您将如何创建一个带有ID列表的方法?

时间:2013-09-06 15:42:47

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

我想要一个看起来像的方法(api动作方法):

public List<User> GetUserList(int userId, string commaSeperatedListOfIds)
{
...

}

根据我的理解,web api控制器会自动转换json请求并映射参数,因此最好将自定义类创建为如下参数:

public class UserListRequest
{
    public int UserId {get;set;}
    public string CsvListOfIds {get;set;}
}

2 个答案:

答案 0 :(得分:1)

  

根据我的理解,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方法。 (如果您想在控制器中使用多个post方法,请参阅this question

您可以通过jquery或Fiddler(或任何您想要的方式)发送请求。我用Fiddler测试了它。您可能会看到How to debug a Web API through Fiddler

设置好控制器后,然后构建项目并以调试模式启动它。启动Fiddler并转到作曲家。

在地址栏中粘贴控制器的URI(来自IE / Brower),并选择POST作为Http方法。 你的URI就像:

http://localhost:60291/api/values/GetUserList

在Fiddler Composer中 - &gt;请求标头指定

Content-Type: application/json

在Fiddler Composer中 - &gt;请求正文,指定您的JSON

{
   "UserId": 1,
    "CsvListOfIds": "2,3,4,5"
}

(您也可以使用http://json2csharp.com/从json创建C#模板类)

在控制器中的方法上放置调试点,然后在Fiddler Hit Execute中,您将看到Visual Studio中的Debug点是Hit,并且数据填充在参数中。 enter image description here

稍后您可以返回List<User>,您将看到Fiddler中的回复。

[{"ID":1},{"ID":2}]

我暂时创建了一个类User,如:

public class User
{
    public int ID { get; set; }
}

希望这会有所帮助。

答案 1 :(得分:0)

是的,差不多。在通过POST请求将其传递给控制器​​之前,使用与javascript中的ViewModel(UserListRequest)相同的属性名创建一个json对象。使用IEnumerable&lt;&gt;当你有列表传递给控制器​​。在您的示例中,您的UserListRequest类中的Id列表可以是IEnumerable<int>(用于类型安全)。在javascript方面,它可以是一个数组。

编辑:获取

$.get(url, function (data) {
    var ids= (data.CsvListOfIds.split(','));        
});