在我的Web API中,我对包含enum
属性的对象进行CRUD操作的端点。
// User.cs
public class User
{
public string Username { get; set; }
public Platform Platform { get; set; }
}
public enum Platform
{
Windows, Linux, MacOS
}
// UserController.cs
public class UserController : ApiController
{
public IHttpActionResult Post(User value)
{
users.Add(value);
return Ok();
}
//...
}
使用以下有效负载调用端点时,它可以正常工作:
{"Username": "jason", "Platform": "Linux"}
ASP .NET将枚举值正确解析为Platform.Linux
但是,如果大小写不同,例如:
{"Username": "jason", "Platform": "linux"}
然后,ASP .NET不会将其识别为Platform.Linux
,而是默默使用默认值Platform.Windows
。
API从无法更改的其他服务获取请求,因此必须同时支持两种大小写形式。
我知道我可以只使用两个等效的枚举值,而不同的大小写是这样的:
public enum Platform
{
Windows=0, windows=0,
Linux=1, linux=1,
MacOS=2, macos=2
}
但是我想知道是否有更好的解决方案?
答案 0 :(得分:1)
事实证明,在我的情况下,有一个自定义转换器用于该对象,然后再传递给控制器。该转换器使用Enum.TryParse
来解析值:
if (Enum.TryParse(enumLiteral, out result))
{
return result;
}
我将其更改为
if (Enum.TryParse(enumLiteral, true, out result))
{
return result;
}
这使解析不区分大小写。
请注意,这是一个自定义转换器,不属于ASP.NET本身。当我完全删除该转换器并仅使用本机功能时,不会发生此问题。