控制台应用程序 HttpClient 发布到 mvc web api
Posted
技术标签:
【中文标题】控制台应用程序 HttpClient 发布到 mvc web api【英文标题】:console app HttpClient post to mvc web api 【发布时间】:2012-11-03 12:06:23 【问题描述】:我有一个从 Visual Studio 2012 模板构建的默认 mvc web api 实例。它在默认的 ValuesController 中具有以下路由和 post 方法 - 除了 Post 方法的内容之外,MVC 站点在初始创建时未修改。另外,我正在使用 .NET 框架 4.0,因为我计划以 Azure 为目标。
注册方法
public static void Register(HttpConfiguration config)
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
和 Post 方法
// POST api/values
public string Post([FromBody]string value)
if (value != null)
return "Post was successful";
else
return "invalid post, value was null";
我创建了一个控制台应用程序,它使用 HttpClient 来模拟向服务发布,但不幸的是,进入 Post 的“值”始终为空。在 HttpClient 上调用 PostAsync 后成功命中 Post 方法。
我不清楚如何映射我的请求以使值包含我传入的 StringContent...
static void Main(string[] args)
string appendUrl = string.Format("api/values");
string totalUrl = "http://localhost:51744/api/values";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/xml");
string content = "Here is my input string";
StringContent sContent = new StringContent(content, Encoding.UTF8, "application/xml");
HttpResponseMessage response = null;
string resultString = null;
client.PostAsync(new Uri(totalUrl), sContent).ContinueWith(responseMessage =>
response = responseMessage.Result;
).Wait();
response.Content.ReadAsStringAsync().ContinueWith(stream =>
resultString = stream.Result;
).Wait();
我是 MVC web api 和 HttpClient 使用的新手 - 任何帮助我指出正确方向的帮助将不胜感激。
【问题讨论】:
【参考方案1】:试试下面的代码:
class Program
static void Main(string[] args)
HttpClient client = new HttpClient();
var content = new StringContent("=Here is my input string");
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
client.PostAsync("http://localhost:2451/api/values", content)
.ContinueWith(task =>
var response = task.Result;
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
);
Console.ReadLine();
看看这篇博文的“发送简单类型”部分:http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1
【讨论】:
这太棒了!我的原始代码中缺少的两个部分是等号(用于简单类型)和 ContentType。添加这两个部分解决了这个问题。以上是关于控制台应用程序 HttpClient 发布到 mvc web api的主要内容,如果未能解决你的问题,请参考以下文章
System.Net.Http.HttpClient 添加 Request-Id 标头
使用 httpClient.postasync 进行 web api 调用 .net core
.NET HttpClient 在多次请求后挂起(除非 Fiddler 处于活动状态)
Application Insights:控制台应用程序 HttpClient 关联不起作用
HttpClient、UseDefaultCredentials、Windows 身份验证、.NET Core 2.0+ 控制台应用程序收到 401 Unauthorized