【发布时间】:2013-05-16 13:13:30
【问题描述】:
我正在尝试使用来自 ASP.NET Web Api 的 HttpClient 来完成一个示例,但我在响应中收到状态代码 500,我不知道为什么。
我在测试中有以下代码:
var baseAddress = new Uri("http://localhost:54997");
var config = new HttpSelfHostConfiguration(baseAddress);
var server = new HttpSelfHostServer(config);
((HttpConfiguration)config).Routes.MapHttpRoute(
name: "default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new
{
id = RouteParameter.Optional
});
using (var client = new HttpClient(server))
{
client.BaseAddress = baseAddress;
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync("/api/user/getUserDetails").Result;
}
我的控制器方法是这样的:
[HttpGet]
[ActionName("getUserDetails")]
public string GetUserDetails()
{
return "hello";
}
控制器动作在 Fiddler 中响应良好。
错误似乎是在响应的 Content 属性中抛出的。
[System.Net.Http.ObjectContent<System.Web.Http.HttpError>] = {System.Net.Http.ObjectContent<System.Web.Http.HttpError>}
很抱歉,这没什么好说的。
编辑 请参阅下面达林的回答。我还将代码放在控制台应用程序中,它工作正常 - 那么为什么不在测试项目中呢?
有人可以指出我可能出错的正确方向吗?
【问题讨论】:
-
打开跟踪并添加一个 ConsoleListener ,您应该会看到问题出现在哪里。
-
在上面的代码中得到响应后,可以
response.Content.ReadAsStringAsync().Result看看是否能得到更多关于错误的详细信息吗?另外,如果没有错误详细信息,您可以尝试将错误详细信息策略设置为 Alwaysconfig.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always(这与它的 localhost 无关,但您可以尝试一下) -
看看我的问题并在这里回答:stackoverflow.com/q/23438416/1828879您的 BaseAddress 和相关 URI 的尾随和前导斜杠错误。
标签: asp.net-web-api httpclient