带有枚举输入参数的Web Api post方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有枚举输入参数的Web Api post方法相关的知识,希望对你有一定的参考价值。
在尝试调用以枚举作为输入参数的Web API方法时,为什么会在下面的屏幕截图中看到错误?我该如何解决这个问题?
无论我做什么,似乎messageDestinationType
总是无效的......
我宁愿将输入类型保留为枚举。我很擅长使用web apis,当WCF完美地处理这个场景时,我无法理解这是多么困难
[JsonConverter(typeof(StringEnumConverter))]
public enum MessageDestinationType
{
None = 0,
[EnumMember(Value = "SMS")]
SMS = 1,
[EnumMember(Value = "Email")]
Email = 2,
PushNotification = 3,
UXP = 4,
IntermediaryApp = 5,
YouthApp = 6
}
[HttpPost, Route("ReadClientMessagesC")]
public IHttpActionResult ReadClientMessagesC([FromBody]MessageDestinationType messageDestinationType)
{
var request = new ClientInboxRequest
{
Gcn = Gcn,
ClientIpAddress = ClientIpAddress,
CallingApplication = CallingApplication.Name,
CallingApplicationVersion = CallingApplication.Version,
CookieString = CookieString,
HasPbUk = HasPbUk,
HasIamIms = HasIamIms,
HasPbZa = HasPbZa,
HasSps = HasSps,
HasWiUk = HasWiUk,
HasWiZa = HasWiZa,
LinkedGcns = LinkedGcns,
RequestId = RequestId.ToString(),
SsoProfiles = SsoProfiles.Select(x => x.Name).ToList()
};
MessageDestinationType messageDestination = (MessageDestinationType)messageDestinationType;
return Ok(ClientMessageCenterHelper.ReadClientMessagesA(Gcn, messageDestination, request));
}
错误消息:{“消息”:“请求无效。”,“MessageDetail”:“参数字典包含非可空类型'API.Domain.ClientMessageCenter.MessageDestinationType'for method'的参数'messageDestinationType'的空条目System.Web.Http.IHttpActionResult ReadClientMessagesC(API.Domain.ClientMessageCenter.MessageDestinationType)'in'ID.ClientMessageCenter.Controllers.ClientMessageCenterController'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 “ }
你有几个不同的选择来解决这个问题:
- 如果您可以更改发送到
ReadClientMessagesC
的数据,请将数据作为int
(Enum
值)而不是Enum
描述传递。 - 如果无法更改传入数据,请将参数类型更改为
string
并在方法体中使用Enum.Parse或; - 保持方法编写并使用custom model binder将
string
转换为MessageDestinationType
。
您应该为此选择字符串或整数来代替枚举。
如果仍需要使用它,则将其解析为枚举。
就个人而言,如果我在使用RESTful API,我会更喜欢整数,因为你在这里有效地暴露了一个Type。您可以通过Get / GetAll方法使这些类型可用,这样可以保持API的可维护性。
以上是关于带有枚举输入参数的Web Api post方法的主要内容,如果未能解决你的问题,请参考以下文章
参数中带有 IEnumerable 的 C# OData Web API POST 端点返回错误 400,输入无效
如何将类型的对象作为参数传递给Web Api Get / Post方法