【发布时间】:2018-05-18 10:34:42
【问题描述】:
好的,这里有很多事情要做,所以我会尽量让我的问题和示例保持简单。考虑到这一点,请询问您是否需要任何其他信息或澄清任何事情。
代码
我有一个 Web API 2 项目,其中包含许多控制器和操作。我遇到问题的特定操作在 ContactController 中定义如下:
[HttpPost]
public MyModel GetSomething(System.Nullable<System.Guid> uid)
{
return GetMyModel(uid);
}
以防万一,我的路由设置如下:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = RouteParameter.Optional }
);
现在我有另一个项目需要调用上述操作。为了调用 Web API,我使用了HttpClient。请注意,我还有许多其他操作调用正常,因此这不是连接问题。
我用来调用Web API方法的代码如下:
using (HttpClient client = GetClient())
{
var obj = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("uid", someGuid.ToString()) };
var response = client.PostAsync(path, new FormUrlEncodedContent(obj)).Result;
return response.Content.ReadAsAsync<T>().Result;
}
在这种情况下,path 基本上是:
localhost:12345/api/contact/getsomething
问题
PostAsync 调用 Result(即上述代码中的 response)给出了以下消息:
{StatusCode:404,ReasonPhrase:“未找到”,版本:1.1,内容:System.Net.Http.StreamContent,标头: { Pragma:无缓存 X-SourceFiles: =?UTF-8?B?QzpcRGV2ZWxvcG1lbnRcUHJvamVjdHNcTGltYVxMaW1hIHYzXERFVlxMaW1hRGF0YVNlcnZpY2VcYXBpXHVzZXJhY2Nlc3NcZ2V0bW9kdWxlc2FjY2Vzcw==?= 缓存控制:无缓存 日期:格林威治标准时间 2018 年 5 月 18 日星期五 10:25:49 服务器:Microsoft-IIS/10.0 X-AspNet-版本:4.0.30319 X-Powered-By: ASP.NET 内容长度:222 内容类型:应用程序/json;字符集=utf-8 过期:-1 }}
如果我在 aciton 中放置一个断点,那么它就不会触发。但是,我觉得奇怪的是,当我调用它时,Visual Studio (2018) 告诉我特定操作对该特定操作有一个“失败的请求”。这么清楚它必须知道我要调用哪个方法?
此时我已经没有关于如何进一步调试的想法了。我在这里做错了什么?
【问题讨论】:
-
不相关但不阻止与
.Result的异步。搞清楚 404 问题后,你可能会陷入僵局。 -
@Crowcoder:我会调查,但我实际上并不希望它是异步的
-
然后使用同步 API,如
HttpWebRequest或其他。
标签: c# asp.net-web-api2 dotnet-httpclient