У меня есть третья сторона, которая будет отправлять запросы Post на службу Web Api, которую я создаю.
У меня есть такая функция, как
public returnObject PostFromThirdPartyObject(ThirdPartyObject JSONobj)
{
// Process Object
return returnObject;
}
Это нормально работает, когда я отправляю правильный объект.
Проблема в том, что при отправке недействительного объекта ThirdPartyObject
заполняется нулями.
Я хочу иметь возможность перехватить недопустимый объект, чтобы я мог регистрировать и диагностировать проблему, потому что я не доверяю сторонней спецификации.
Как я могу обработать тело сообщения, которое не соответствует ожидаемому типу?
Редактировать: Код, используемый для проверки в случае необходимости изменения
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);
}