[英]Pass parameters to C# Http client post
我正在學習使用客戶端創建RESTful API,但在將用戶輸入傳遞給帖子方面很費勁。 我的控制器很好,因為我可以將數據發送到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();
}
}
在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; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.