错误500发送JSON POST请求到API
我正在Xamarin.Forms(共享项目库)中开发一个应用程序,它向本地托管的API发送自定义类型列表(只是文档编号和文件类型枚举)。错误500发送JSON POST请求到API
如果我捕捉到JSON字符串,并从邮差送它,一切工作正常,但只要我从应用程序运行httpClient.PostAsync,我收到以下错误:
{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Cache-Control: no-cache Pragma: no-cache Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Thu, 25 May 2017 16:00:44 GMT Content-Type: application/json; charset=utf-8 Expires: -1 Content-Length: 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);
Web服务:
[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
。
真棒!非常感谢。我从来不会想到我自己。现在一切都很完美。再次感谢你。 –
您需要调试500错误服务器端。这意味着服务器在某处引发异常。 –