![](/img/trans.png)
[英]Why is my HTTP Post no longer passing the body content after adding Microsoft.AspNetCore.OData.Versioning
[英]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.