簡體   English   中英

將參數傳遞給C#Http客戶端帖子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM