[英]Error 500 Sending JSON POST Request to API
我正在Xamarin.Forms(共享項目庫)中開發一個應用程序,該應用程序將自定義類型的列表(僅文檔編號和文件類型枚舉)發送到本地托管的API。
如果我捕獲JSON字符串並將其從Postman發送,則一切正常,但是一旦我從應用程序運行httpClient.PostAsync,就會收到以下錯誤消息:
{狀態代碼:500,原因短語:“內部服務器錯誤”,版本:1.1,內容:System.Net.Http.StreamContent,標頭:{緩存控制:無緩存語法:無緩存服務器:Microsoft-IIS / 7.5 X -AspNet-版本:4.0.30319 X-Powered-通過:ASP.NET日期:2017年5月25日星期四16:00:44 GMT內容類型:application / json; charset = utf-8有效期:-1內容長度:36}}
我無所適從,我做錯了什么。 有人可以幫忙嗎?
類型:
class EmailFiles
{
public string docNumber { get; set; }
public EmailFileTypes.EmailFileType type { get; set; }
}
請求:
List<EmailFiles> files = new List<EmailFiles>();
if (chkShipping.IsToggled)
{
EmailFiles file = new EmailFiles();
file.type = EmailFileTypes.EmailFileType.CustomerFile;
file.docNumber = Helpers.GlobalVariables.gSOLookup.PackList;
files.Add(file);
}
if (chkClosed.IsToggled)
{
EmailFiles file = new EmailFiles();
file.type = EmailFileTypes.EmailFileType.ClosedFile;
file.docNumber = Helpers.GlobalVariables.gSOLookup.Invoice;
files.Add(file);
}
if (chkInvoice.IsToggled)
{
EmailFiles file = new EmailFiles();
file.type = EmailFileTypes.EmailFileType.Invoice;
file.docNumber = Helpers.GlobalVariables.gSOLookup.Invoice;
files.Add(file);
}
string url = SetUrls.urlMtApi + "/api/EmailFile/?emailAddresses=" + strEmails;
string strJson = JsonConvert.SerializeObject(files);
//Results in: "[{\"docNumber\":\"234273\",\"type\":1},{\"docNumber\":\"633007\",\"type\":2}]" - which works in Postman!!
StringContent content = new StringContent(strJson, Encoding.UTF8, "application/json");
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.PostAsync(url, content);
網絡服務:
[System.Web.Http.HttpPost]
public string EmailFile([FromBody]string jsonfiles, [FromUri] string emailAddresses)
{
List<EmailFiles> files = JsonConvert.DeserializeObject<List<EmailFiles>>(jsonfiles);
...
}
無需手動反序列化json主體,只需讓模型綁定器通過使用正確的參數為您完成:
[System.Web.Http.HttpPost]
public MyModelReturnType EmailFile([FromBody] List<EmailFiles> files, [FromUri] string emailAddresses)
{
// the framework has already deserialized the json request for you
}
如果您使用string
代替真正的模型作為參數,則服務器將無法將您的請求主體綁定到該請求主體,因為它將需要一個JSON 字符串 (用雙引號"
包圍"
),這可能會導致模型綁定異常,會導致您的客戶出現500錯誤。
返回類型也是如此,只要使用您希望客戶端接收的任何類作為返回類型即可,如果要發送給Json,則不使用string
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.