【发布时间】:2013-01-11 21:53:05
【问题描述】:
我创建了一些 Web api,当发生错误时,api 返回使用 CreateErrorResponse 消息创建的 HttpResponseMessage。像这样的:
return Request.CreateErrorResponse(
HttpStatusCode.NotFound, "Failed to find customer.");
我的问题是我无法弄清楚如何在消费者应用程序中检索消息(在本例中为“未能找到客户。”)。
这是消费者的样本:
private static void GetCustomer()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
string data =
"{\"LastName\": \"Test\", \"FirstName\": \"Test\"";
var content = new StringContent(data, Encoding.UTF8, "application/json");
var httpResponseMessage =
client.PostAsync(
new Uri("http://localhost:55202/api/Customer/Find"),
content).Result;
if (httpResponseMessage.IsSuccessStatusCode)
{
var cust = httpResponseMessage.Content.
ReadAsAsync<IEnumerable<CustomerMobil>>().Result;
}
}
非常感谢任何帮助。
【问题讨论】:
-
你能把代码贴在你真正试图阅读错误信息的地方吗?在这种情况下,消息的内容实际上应该是带有 HttpError 对象的 ObjectContent - 请参阅官方页面:msdn.microsoft.com/en-us/library/jj127065(v=vs.108).aspx 无论哪种方式,您都必须改变读取成功响应和错误响应的方式,因为一个显然是在你的情况下是 StreamContent,另一个应该是 ObjectContent
-
@JoannaTurban - 这是代码。我不知道如何阅读错误消息,这就是我发布问题的原因。到目前为止,您一直是最有帮助的人,但我仍然没有解决我的问题。我正在按照您的链接尝试更多的事情。我走神了,没有解决这个问题。但现在我又想弄清楚了。
-
你可以试试下面Update2中的代码,看看如果出现错误你仍然得到StreamContent吗?
-
我假设您想查看内容的类型。这是输出。 “内容的类型是 System.Net.Http.StreamContent。”我必须添加 {0} 才能输出类型。
-
好的,那么另一个问题 - 你什么时候创建错误响应?在什么条件下?是否只是在例外情况下?请注意,仅当状态代码在
200-299内时,IsSuccessfulStatusCode才会计算为true。是不是对于一个特定的状态代码,比如 400,你会期待一条错误消息,但实际上它从来没有通过正在创建的方法/过滤器?也许添加一些日志来查看是否已经调用了 createErrorResponse 方法