c# - 在 Web Api 中接收 Post 请求时处理无效的 Body
问题描述
我有一个第三方会将 Post 请求发送到我正在制作的 Web Api 服务。
我有一个像
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);
}
解决方案
尝试使用 ModelState.IsValid():
public returnObject PostFromThirdPartyObject([FromBody] ThirdPartyObject JSONobj)
{
if(!ModelState.IsValid()) {
// Do someting
}
// Process Object
return returnObject;
}
推荐阅读
- python - QMainWindow 在被 QDialog 调用后没有被激活
- java - 如何在Java中找到一个月第一天的星期几(星期一,星期二等)?
- flutter - 如何将 FloatingActionButton 定位在屏幕的右下角
- azure - Azure 容器实例命令执行返回“没有这样的文件或目录”
- awk - 如何使用 awk 提取特定 VM 和组的 UUID?
- javascript - 在 .net core 5 pwa 中使用 navigator.setAppBadge()
- javascript - session_start() 不能在 firefox 和operamini 中运行,但在 microsoft edge 浏览器中运行良好
- java - 如何在 2021 年使用 Maven 构建 JavaFX 应用程序?
- python - 在pygame中移动时对象闪烁
- linux - 设置 Linux 文件句柄分配限制