【发布时间】:2014-06-30 00:46:09
【问题描述】:
从我的 MVC 应用程序中,我尝试在名为 MembershipController 的 API 控制器中向这些示例端点(操作)发出 POST 请求:
[HttpPost]
public string GetFoo([FromBody]string foo)
{
return string.Concat("This is foo: ", foo);
}
[HttpPost]
public string GetBar([FromBody]int bar)
{
return string.Concat("This is bar: ", bar.ToString());
}
[HttpPost]
public IUser CreateNew([FromBody]NewUserAccountInfo newUserAccountInfo)
{
return new User();
}
这是客户端代码:
var num = new WebAPIClient().PostAsXmlAsync<int, string>("api/membership/GetBar", 4).Result;
这是我的WebAPIClient 课程的代码:
public class WebAPIClient
{
private string _baseUri = null;
public WebAPIClient()
{
// TO DO: Make this configurable
_baseUri = "http://localhost:54488/";
}
public async Task<R> PostAsXmlAsync<T, R>(string uri, T value)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
var requestUri = new Uri(client.BaseAddress, uri);
var response = await client.PostAsXmlAsync<T>(requestUri, value);
response.EnsureSuccessStatusCode();
var taskOfR = await response.Content.ReadAsAsync<R>();
return taskOfR;
}
}
}
我为 Web API 定义了以下默认路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
更新
我的代码会进入调试器,直到调用 System.Net.HttpClient 代码上的 PostAsXmlAsync 方法。但是,Fiddler 中没有显示任何请求。
但是,如果我尝试在 Fiddler 中编写 POST 请求或尝试通过浏览器向 API 端点之一发起 GET 请求,则通过 Fiddler 编写的 POST 请求会告诉我我没有发送任何数据并且我必须。发送 GET 请求的浏览器正确地告诉我该操作不支持 GET 请求。
似乎System.Net.HttpClient 类没有正确发送 POST 请求。
【问题讨论】:
-
你能展示一下你的 POST 请求不起作用的样子吗?
-
Fiddler 默认不捕获本地主机流量。你必须为它做点什么来捕获这个流量:docs.telerik.com/fiddler/Configure-Fiddler/Tasks/…
-
您可以使用 chrome 扩展程序,如 Postman、DHC 或 Advanced REST 客户端,来测试您的 Web API。尝试其中的任何一个,它们都非常有帮助,并且使用 Fiddler 更容易提出请求。 (我更喜欢邮递员:chrome.google.com/webstore/detail/postman-rest-client/…)。
-
这是很久以前的事了,但我几乎逐字逐句地遇到完全相同的问题,你有没有解决过这个问题?
-
@NardDog:我不记得了,但我认为我的 Newtonsoft.Json 库没有正确加载到我的客户端应用程序中,我必须更新它。我通过尝试/捕获并追逐嵌套在主异常树中的每个
InnerException来了解。
标签: asp.net asp.net-mvc asp.net-web-api dotnet-httpclient