gpt4 book ai didi

asp.net-web-api - 反序列化 HttpError ModelState

转载 作者:行者123 更新时间:2023-12-01 02:32:49 24 4
gpt4 key购买 nike

使用我现在拥有的最新 webapi 位

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);

我的客户是一个 MVC 网站,它从响应中读取值。我终于让它从响应中读取 HttpError 对象,但是加载 ModelState 是......至少可以说不直观。

有没有更干净的方法来写这个?
var httpError = response.Read<HttpError>();
var errors = httpError["ModelState"] as JObject;

foreach (var error in errors)
foreach (var message in error.Value.Values<string>())
{
modelState.AddModelError(error.Key, message);
}

最佳答案

虽然如您所见,错误响应可以很容易地反序列化为 HttpError,但其中的 ModelState 值最终只会作为 JObject。

你可能已经尝试过类似的东西:

var errors = ((JObject)errorMsg["ModelState"])
.ToObject<ModelStateDictionary>();

或者可能:
var errors = ((JObject)errorMsg["ModelState"])
.ToObject<Dictionary<string, ICollection<ModelError>>>();

并发现它不会转换。我能找到的最好的选择是:
var errors = ((JObject)errorMsg["ModelState"])
.ToObject<Dictionary<string, IList<string>>>();

这使您的迭代稍微整洁:
foreach (var err in errors)
foreach (var msg in err.Value)
{
modelStateDictionary.AddModelError(err.Key, msg);
}

正如我所看到的,问题是字符串不会反序列化为 ModelError 实例,并且 ModelErrorCollection 不幸地隐藏了它的基类构造函数 Collection(IList list) 进一步复杂化。 .

关于asp.net-web-api - 反序列化 HttpError ModelState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12047136/

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