gpt4 book ai didi

c# - 从 URI 到复杂类型的 ASP.net WebApi 参数绑定(bind)

转载 作者:太空狗 更新时间:2023-10-29 23:15:35 25 4
gpt4 key购买 nike

我想在 .net 4.5 上使用 ASP.net WebApi 创建一个 REST 网络服务

网址应该是这样的格式:

/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001

关联的 Controller 如下所示:

[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}

Demographics 是一个自定义对象,基本上只是具有某些属性的 DTO。但是,它包含一个具有自定义枚举类型的属性:

enum Gender
{
Female = 0,
Male
}

如果 URL 是上述格式,则默认映射工作得很好。不过,当然我还需要检查url提供的参数是否正确。

ASP.net WebApi (afaik) 默认会尝试根据假设的类型(或者是否可以转换为该类型)映射每个参数。如果它在 URI 中找不到匹配值,它似乎会假定它只是 0。

现在这让我遇到了一个非常不幸的情况,根据定义,0 仍然是 Gender Demographics.Gender (0 ~ Gender.Female) 的有效值。

最简单的解决方案是更改枚举,使 0 成为我可以检查的“不确定”状态。但是,我无法更改枚举。我可以为 Demographics 对象创建自己的重载,但我宁愿不这样做,因为我认为必须有更好的方法。

我能否明确地将性别参数绑定(bind)到 URI 中的参数并在未提交时抛出异常?

我阅读了有关类型转换器的内容,但我必须处理 URI 字符串,并且认为我必须实现许多 WebApi 显然已经具备的功能。

请记住,我必须处理 URI,不能使用请求主体。

最佳答案

像这样使枚举可为空怎么样?

public class Demographics
{
public Gender? Gender { get; set; }
}

在 action 方法中,您可以检查 demographics.Gender 是否为 null。

关于c# - 从 URI 到复杂类型的 ASP.net WebApi 参数绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105008/

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