gpt4 book ai didi

c# - 使用 ModelState 从 WebAPI 2 返回错误

转载 作者:太空狗 更新时间:2023-10-29 18:06:41 24 4
gpt4 key购买 nike

我正在尝试使用 ModelState 对象向客户端发送错误;我正在为该服务使用 asp.net Web API。

在 Web 服务方面,我正在这样做。

    public HttpResponseMessage VerifyData(Cobject data)
{
string[] errors;
if (!VerifyAllRequiredData(data, out errors))
{
foreach(string error in errors)
ModelState.AddModelError("", error);
return Request.CreateErrorResponse(HttpStatusCode.ExpectationFailed, ModelState);
}

return Request.CreateResponse(HttpStatusCode.OK, data);
}

我正在为该服务创建一个 .NET 客户端库,以便我们可以将它用于现有的 Windows 应用程序。

在客户端:

    public bool VerifyData(Cobject data)
{
try
{
HttpClient c = new HttpClient();
c.BaseAddress = BaseAddress;
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(JsonHeader));
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(HTMLHeader));
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(TextHeader));
var asyncResponse = this.PostAsJsonAsync(url, data);
asyncResponse.Wait();
asyncResponse.Result.EnsureSuccessStatusCode();
return true;
}
catch (HttpRequestException hre)
{
Console.WriteLine(hre.Message);
return false;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}

这里的问题是我没有看到在响应时添加到 ModelState 的任何消息。我看到状态(ExpectionFailed)但没有消息。我如何在客户端检索这些消息?

最佳答案

我使用“类似”的代码来发帖并访问我的网络 API。让我复制一些代码,以便您可以从 ModelState 获取信息

var responseTask = await client.SendAsync(request);
var result = responseTask.ContinueWith(async r =>
{
var response = r.Result;

var value = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
var obj = new { message = "", ModelState = new Dictionary<string,string[]>() };
var x = JsonConvert.DeserializeAnonymousType(value, obj);
throw new AggregateException(x.ModelState.Select(kvp => new Exception(string.Format("{0}: {1}", kvp.Key, string.Join(". ", kvp.Value)))));
}

}).Result;

我希望这对你有用:)

关于c# - 使用 ModelState 从 WebAPI 2 返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22289383/

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