【发布时间】:2014-03-09 22:59:05
【问题描述】:
我正在尝试使用 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)但没有消息。如何在客户端检索这些消息?
【问题讨论】:
-
ModelState 在 HTTP 内容中返回。您可以使用 Fiddler 来查看它的外观。不幸的是,我知道没有用于反序列化 ModelState 的 Web API 客户端支持,但自己定义兼容模型很容易。
标签: c# rest asp.net-web-api .net-4.5 dotnet-httpclient