将参数传递给C#Http客户端post

将参数传递给C#Http客户端post,c#,api,asp.net-web-api,routes,C#,Api,Asp.net Web Api,Routes,我正在学习使用客户机创建RESTful API,但我正在努力将用户输入传递给post。我的控制器很好,因为我可以将数据发送到db(使用Swagger进行测试),但在客户端,调试器在我的PostAsJsonAsync上给了我一个错误。我认为这可能与路线有关。这是我客户的邮政编码: static async Task AddAsync(ForumPost fp) { try { using (HttpClient client = new HttpClient())

我正在学习使用客户机创建RESTful API,但我正在努力将用户输入传递给post。我的控制器很好,因为我可以将数据发送到db(使用Swagger进行测试),但在客户端,调试器在我的PostAsJsonAsync上给了我一个错误。我认为这可能与路线有关。这是我客户的邮政编码:

static async Task AddAsync(ForumPost fp)
{
    try
    {
        using (HttpClient client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:7656/");

            client.DefaultRequestHeaders.Accept
                      .Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // HTTP POST
            ForumPost thePost = new ForumPost() { 
                                    Subject = fp.Subject, 
                                    Message = fp.Message};
            HttpResponseMessage response = await client.PostAsJsonAsync("post", thePost);
            if (response.IsSuccessStatusCode)
            {
                Uri uri = response.Headers.Location;
                Console.WriteLine("URI for new resource: " + uri.ToString());
            }
            else
            {
                Console.WriteLine(response.StatusCode + " " + response.ReasonPhrase);
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
        Console.ReadLine();
    }
}
以及控制器的相关位

[HttpPost]
// POST: api/Forum
[Route("post")]
public void PostNewMessage (string subject, string message)
{
    if (ModelState.IsValid)
    {
        ForumPost p = new ForumPost(subject, message);
        db.ForumPosts.Add(p);
        db.SaveChanges();
    }
}

我在这里看了很多不同但相似的问题,所以很难理解。我曾尝试在路线中放置占位符,但可能我没有正确地执行它?(如果这是正确的思考方式!)如果有人能在这方面帮助我,我将不胜感激

当Web API操作参数是字符串等简单类型时,该机制假定它们来自查询字符串。要推断值应该来自请求主体,只需直接使用
ForumPost
类作为参数,而不是单个字符串值:

[HttpPost]
// POST: api/Forum
[Route("post")]
public void PostNewMessage(ForumPost p)
{
    if (ModelState.IsValid)
    {
        db.ForumPosts.Add(p);
        db.SaveChanges();
    }
}
还要注意,
ForumPost
需要一个无参数构造函数,以便框架知道如何创建实例。像这样定义它,你应该是好的:

public class ForumPost 
{
    public string Subject { get; set; }
    public string Message { get; set; }
}

嗨,托德,谢谢你的回复。我试图实现你所说的,但没有结果。我不确定这是否是(最大的!)问题。即使我在客户端硬编码一篇新文章并将其传递给PostAsJsonAsync,我也会收到一个错误。这是一个套接字错误异常:“System.Net.Http.HttpRequestException:发送请求时出错。-->System.Net.WebException:无法连接到远程服务器-->System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝了它127.0.0.1:23226\r\n…等等这是一个网络问题,如果搜索该异常消息,您将发现不缺少结果,例如。虽然我相信我建议的修复程序也需要让它工作。再次感谢Todd,最后简单的输入错误端口号。是的,我现在已经实施了你的建议,我的职位现在正在工作。