ASP.NET Core模型绑定在枚举项不可用的情况下获取默认枚举值



我有一个ASP.NET Core 3.1 Web API项目。有一个枚举包含以下详细信息:

public enum TestPageType
{
Item1,
Item2,
Item3,
Item4
}
[HttpGet("{type}/{mode}")]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public IEnumerable<ControlInfo> GetControlData(TestPageType type, string mode)
{
switch (type)
{
case TestPageType.Item1:
case TestPageType.Item2:
case TestPageType.Item3:
case TestPageType.Item4:
default:
return _testService.GetData(GetControlType(type), 0, readonlyMode);
}
}

从客户端应用程序,Item5作为输入发送到API端点:

https://localhost:8080/api/test/GetControlData/item5/edit

在这篇关于调试的文章中,我看到了TestPageType枚举中的第一个项:Item1被选中。

有人能帮我解决这个问题吗?

默认情况下,枚举成员的关联常数值类型为int;它们从零开始,按照定义文本的顺序增加一。枚举类型E的默认值是表达式(E(0产生的值,即使零没有相应的枚举成员。有关详细信息,请参阅枚举类型(C#参考(。

在您的代码中,由于TestPageType没有Items5项,因此它将使用默认值(Item1(。

要接收不存在的项目:";项目5";,您可以尝试将参数类型从TestPagetType更改为string类型。然后检查该值是否为枚举值。

代码如下:

[HttpGet("{type}/{mode}")]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public IActionResult GetControlData(string type, string mode)
{ 
var selectitem = "";
switch (type)
{
case "Item1" :
selectitem =  TestPageType.Item1.ToString();
break;
case "Item2":
selectitem = TestPageType.Item2.ToString();
break;
case "Item3":
selectitem = TestPageType.Item3.ToString();
break;
case "Item4":
selectitem = TestPageType.Item4.ToString();
break;
default:
selectitem = "no exist";
break;
}
return Ok(selectitem);
}

最新更新