【发布时间】:2019-08-02 23:54:15
【问题描述】:
我有第三方将向我正在制作的 Web Api 服务发送 Post 请求。
我有一个类似的功能
public returnObject PostFromThirdPartyObject(ThirdPartyObject JSONobj)
{
// Process Object
return returnObject;
}
当我发送正确的对象时,这工作正常。
问题是当一个无效的对象被发送时,ThirdPartyObject 被空值填充。
我希望能够捕获无效对象,以便记录和诊断问题,因为我不信任第三方规范。
如何处理与预期类型不匹配的 Post 正文?
编辑:用于测试的代码是否需要更改
string body = JsonConvert.SerializeObject(ThirdPartyObject);
var cfReq = (HttpWebRequest)WebRequest.Create(url);
cfReq.ContentType = "application/json";
cfReq.Method = "Post";
cfReq.ContentLength = body.Length;
var byteArray = Encoding.UTF8.GetBytes(body);
var stream = cfReq.GetRequestStream();
stream.Write(byteArray, 0, body.Length);
var httpResponse = (HttpWebResponse)cfReq.GetResponse();
var stringResponse = string.Empty;
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
stringResponse = streamReader.ReadToEnd();
}
编辑 2:使用对象的解决方法确实很差,希望有人可以发布更正确的方法
public Status PostFromThirdPartyObject([FromBody] object sObject)
{
ThirdPartyObject obj = null;
string sRequest = null;
try
{
sRequest = JsonConvert.SerializeObject(sObject);
LogRequest(sRequest);
var setting = new JsonSerializerSettings();
setting.MissingMemberHandling = MissingMemberHandling.Error;
obj = JsonConvert.DeserializeObject<ThirdPartyObject>(sRequest, setting);
}
catch
{
if (sObject != null)
{
return Error
}
else
{
return NullError
}
}
return processThirdPartyObject(obj);
}
【问题讨论】:
标签: c# json post asp.net-web-api