我被指派为应用程序开发WebAPI Controller (以前从未使用过的东西)。一切正常,出于测试原因,有一些基本请求,例如GetAllUsers(int id)-配置本身很好。

现在是问题所在。我有办法GetAllItems(Carrier carrier),其中Carrier是具有许多不同参数的类。由于数据库中已经有一些Carrier实例用于测试,因此我尝试了查询数据库,基于ID(GUID)属性选择Carrier实例,但没有结果。

当输入参数是一个对象而不是一个单一的值(例如int ID)时,是否有一种方法可以使用测试方法或某种测试输入参数来测试GET请求?

编辑:感谢大家的反馈,解决我的问题的方法实际上比我预期的要容易得多。我非常愿意支持所有人,尽管不幸的是我的声誉太低了(我对stackoverflow还是陌生的),所以我将不得不在不久的将来重新这样做。干杯:)

最佳答案

据我了解您的问题,您希望能够直接在URL中而不是在请求正文中传递Carrier的属性。

前任:

[GET] http://localhost/entities?id=000000000000000

您的 Controller 方法是这个
GetAllItems(Carrier carrier)

运营商具有Id(Guid)属性:
class Carrier {
    public Guid Id { get; set; }
    public string Name { get; set; }
}

就WebApi模型绑定(bind)而言,载体是一个复杂的对象。

模型绑定(bind)的默认行为是:



请参阅:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

期望模型与URL中的复杂对象绑定(bind)不是WebApi的默认行为。

如果您希望 Controller 方法从URL对绑定(bind)的对象进行模型绑定(bind),则必须告诉它。
GetAllItems([FromUri] Carrier carrier)

通过FromUri绑定(bind)指示器,您可以使用URL中的复杂模型绑定(bind)

现在,您甚至可以在URL中添加更多属性映射:
[GET] http://localhost/entities?id=000000000000000&name=ABC

GetAllItems将收到一个Carrier对象,其中填充了:
carrier.Id = 0000-00000000000-000;
carrier.Name =“ABC”

关于c# - 测试将对象作为参数的GET请求(Asp.NET WebApi Controller ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18513752/

10-12 16:17