簡體   English   中英

為什么我的HTTP POST正文內容被接收/處理為NULL?

[英]Why is my HTTP POST Body content received/processed as NULL?

我希望能夠在REST API的POST函數定義中接收POST請求的主體內容。

我有一個客戶端代碼,該代碼將C#對象轉換為JSON,然后將其包裝在HTTP StringContent中。 然后,此有效負載通過HTTP Post請求發送到URL。 但是,當我嘗試返回接收到的字符串時,API中的Post方法始終返回NULL。

客戶:

public async void Register_Clicked(object sender, EventArgs e) // When user enters the Register button
{
 Sjson = JsonConvert.SerializeObject(signup);   
 var httpContent = new StringContent(Sjson);    
 using (HttpClient client = new HttpClient())
     {
        client.BaseAddress = new Uri("https://apiname.azurewebsites.net");
        var response =  await client.PostAsync("api/values", httpContent);    
        var responseContent =  await response.Content.ReadAsStringAsync();

        StatusLabel.Text = responseContent; //To display response in client
     }
}

API POST定義:

[SwaggerOperation("Create")]
[SwaggerResponse(HttpStatusCode.Created)]
public string Post([FromBody]string signup)
{
      return signup;
}

我希望客戶端輸入作為響應顯示在客戶端(StatusLabel.Text)中。 但是,我收到的只是NULL 請指引我正確的方向。

我准備了一個簡單的示例,說明如何從Task檢索Result

async Task<string> GetResponseString(SigupModel signup)
{
  Sjson = JsonConvert.SerializeObject(signup);   
  var httpContent = new StringContent(Sjson);    
  using (HttpClient client = new HttpClient())
   {
     client.BaseAddress = new Uri("https://apiname.azurewebsites.net");
     var response =  await client.PostAsync("api/values", httpContent);    
     var responseContent =  await response.Content.ReadAsStringAsync();   
   }
 return responseContent;
}

您可以將其稱為:

Task<string> result = GetResponseString(signup);
var finalResult = result.Result;
StatusLabel.Text = finalResult; //To display response in client

如果您沒有使用async關鍵字,則可以調用get Result作為:

var responseContent =  response.Content.ReadAsStringAsync().Result;

編輯

基本上,您必須將signup模型發布到API控制器。 如果需要,可以使用SigupModel signup作為參數。 然后,無論您在API中執行什么處理,最終結果都將是一個字符串。 現在,此字符串可以為null,空或具有值。 當您在客戶端中獲得此值時,您將需要執行以下操作:

var responseContent = await response.Content.ReadAsStringAsync(); 
var message = JsonConvert.DeserializeObject<string>(responseContent); 

在這里,您將獲得一個字符串消息,然后可以將其設置為: StatusLabel.Text = message ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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