簡體   English   中英

錯誤500將JSON POST請求發送到API

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

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