ASP.net WebApi参数从URI绑定到复杂类型

bud*_*ble 5 .net c# asp.net asp.net-web-api

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

网址应采用以下格式:

/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001
Run Code Online (Sandbox Code Playgroud)

关联的控制器如下所示:

[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}
Run Code Online (Sandbox Code Playgroud)

人口统计数据是一个自定义对象,基本上只是具有某些属性的DTO.但是,它包含一个具有自定义枚举类型的属性:

enum Gender
{
 Female = 0,
 Male
}
Run Code Online (Sandbox Code Playgroud)

如果URL是上述格式,则默认映射可以正常工作.但是,当然我还需要检查url提供的参数是否正确.

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

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

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

我可以明确地将性别参数绑定到URI中的参数,并在未提交时抛出异常吗?

我读到了类型转换器,但我必须处理URI字符串,并认为我必须实现WebApi显然已经具有的很多功能.

请记住,我必须处理URI,不能使用请求正文.

Bad*_*dri 4

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

public class Demographics
{
    public Gender? Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在操作方法中,您只需检查是否demographics.Gender为 null 即可。