gpt4 book ai didi

c# - 测试将对象作为参数的 GET 请求(Asp.NET WebApi Controller )

转载 作者:可可西里 更新时间:2023-11-01 08:18:47 24 4
gpt4 key购买 nike

我被指派为一个应用程序开发 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)

Carrier 有一个 Id (Guid) 属性:

class Carrier {
public Guid Id { get; set; }
public string Name { get; set; }
}

Carrier 是一个复杂的 WebApi 模型绑定(bind)对象。

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

By default, Web API uses the following rules to bind parameters: If the parameter is a “simple” type, Web API tries to get the value from the URI. Simple types include the .NET primitive types (int, bool, double, and so forth), plus TimeSpan, DateTime, Guid, decimal, and string, plus any type with a type converter that can convert from a string. (More about type converters later.) For complex types, Web API tries to read the value from the message body, using a media-type formatter.

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

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

如果您希望您的 Controller 方法从您必须告诉它的 URL 模型绑定(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com