TL;博士;
“我喜欢我生成的 AutoRest 客户端在处理 200 个场景时如何反序列化我的主要实体。但是,我必须手动解析 400 个场景吗?”,懒惰的程序员说
细节:
所以,我有一个 API,(Web API 2),我做了所有标准的东西..IValidatable
除了使用我的 Web API 实现的属性级验证之外,使用 POCO 会System.Data.DataAnnotations
返回 400 个这样的错误(只是一个例子):
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
并且,在适当的情况下,我使用SwaggerResponse
属性,并记录了我的 swagger.json,以便我生成的客户端知道 400 是可行的响应。
现在,我的单元测试直接实例化了 api 控制器,我故意尝试测试无效的模型状态。我可以 IHttpActionResult
从控制器调用中获取响应,并将其转换为InvalidModelStateResult
并遍历 ModelState 字典。
但是,我发现使用实际的 HTTP 客户端为我的“生产 HTTP 调用”编写类似的东西——并不那么简单。
所以,越来越接近我的问题的核心:
是否有反序列化的首选方法InvalidModelStateResult
?
因此,当通过实际的 http 调用与我的 API 交互时..通过Microsoft.Rest.ServiceClient
我返回的 JSON 的形状略有不同..
与我的 API 交互的示例 MVC 控制器代码:
HttpOperationResponse resp = await client.SpecialLocations.PatchByIdWithHttpMessagesAsync(id, locationType, "return=representation");
if (!resp.Response.IsSuccessStatusCode)
{
//The JSON returned here is not really in the form of an InvalidModelStateResult
ViewBag.Error = await resp.Response.Content.ReadAsStringAsync();
return View(locationType);
}