gpt4 book ai didi

c# - 具有枚举输入参数的 Webapi post 方法

转载 作者:行者123 更新时间:2023-11-30 12:55:30 25 4
gpt4 key购买 nike

为什么在尝试调用采用枚举作为输入参数的 Web API 方法时会出现以下屏幕截图中的错误?我该如何解决这个问题?

无论我做什么,messageDestinationType 似乎始终为 null...

我更愿意将输入类型保留为枚举。我对使用 web api 很陌生,无法理解当 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));
}

enter image description here

Error message: { "Message": "The request is invalid.", "MessageDetail": "The parameters dictionary contains a null entry for parameter 'messageDestinationType' of non-nullable type 'API.Domain.ClientMessageCenter.MessageDestinationType' for method 'System.Web.Http.IHttpActionResult ReadClientMessagesC(API.Domain.ClientMessageCenter.MessageDestinationType)' in 'ID.ClientMessageCenter.Controllers.ClientMessageCenterController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter." }

最佳答案

您可以将字符串(enum 的字符串名称)发送到 Web API Controller (即使它具有类似于 OP 示例中的数值)。 ASP.NET 框架已经规定了自动进行这种转换 - 您只需启用它即可。

在您的 Startup.cs ConfigureServices 方法中,将您的转换器添加到 JsonSerializerOptions.Converters 属性。

services.AddControllers()
.AddJsonOptions(opts =>
{
opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
opts.JsonSerializerOptions.IgnoreNullValues = true;
});

我还建议将 IgnoreNullValues 设置为您喜欢的设置,以使其非常明确。

信用:我从 this post 解决了我的问题(by regisdiogo)并无耻地复制到这里:-)

关于c# - 具有枚举输入参数的 Webapi post 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48442429/

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