将参数传递给 C# Http 客户端帖子
本文关键字:客户端 Http 参数传递 | 更新日期: 2023-09-27 18:37:03
我正在学习使用客户端创建一个 RESTful API,但正在努力将用户输入传递给帖子。我的控制器很好,因为我可以将数据发送到数据库(使用 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();
}
}
我在SO上查看了各种不同但相似的问题,但很难理解。我尝试在路线中放置占位符,但也许我实现不正确?(如果这甚至是正确的思考方式!如果有人能帮助我解决这个问题,我将不胜感激。
当 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; }
}