【发布时间】:2019-09-16 12:55:20
【问题描述】:
在尝试在 c# 中创建一个 Web API 并通过 c# HttpClient 使用它时,我已经编写了一些控制器和客户端调用并且工作正常,但是现在我需要使用两个参数调用一个 Post 方法,一个简单的值(long)直接在URL[FromURI]中,另外一个是body中传入的复杂类型。
我想我可以简化答案,假设我只想调用一个帖子或在 URL 中传递一个简单的参数。
首先,让我们看看我的网络服务器映射配置:
HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute(
name: "DefaultWebApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
这就是我的 Put 控制器:
[HttpPut]
public IHttpActionResult PutComandas([FromUri] long ticket)
{
...
}
我可以使用 PostMan 和诸如 localhost:8200/api/Comandas?ticket=9 之类的 URL 毫无问题地调用它,但我找不到方法与 HttpClient 的调用,对我来说很奇怪,我不能像使用 get 请求那样简单地调用(在 PostMan 中)到 localhost:8200/api/Comandas/9 ......就像路由配置正在为gets工作,但不适用于puts/posts...无论如何,真正的问题是:我找不到使用HttpClient进行正确put调用的方法。我正在尝试:
HttpClient client = new HttpClient();
var response = client.PutAsync("localhost:8200/api/Comandas?ticket=9", null).Result;
但我收到了 Not Found 响应。
注意:我可以毫无问题地使用复杂的主体参数调用 Put/Post。
【问题讨论】:
-
你可能想做
client.PutAsync("http://localhost:8200/api/Comandas?ticket=9", null); -
出于稳定性原因请勿使用
.Resultsee here... 和here -
是的,我是新手,但我读到了一些关于不要使用 .Result 的内容,无论如何,它不起作用
标签: c# asp.net dotnet-httpclient