从 ASP.NET MVC 项目调用 .NET CORE 5 Web API 微服务时无法检索 BadRequest 错误

Posted

技术标签:

【中文标题】从 ASP.NET MVC 项目调用 .NET CORE 5 Web API 微服务时无法检索 BadRequest 错误【英文标题】:Can't retrieve BadRequest errors when calling .NET CORE 5 Web API microservice from ASP.NET MVC project 【发布时间】:2021-11-29 21:44:53 【问题描述】:

我正在尝试从 ASP.NET Core MVC 前端使用 .NET Core 5 Web API 构建的微服务中检索 ModelState 验证错误。

假设我有一个看起来像这样的模型:

public class Comment

    public string Title  get; set; 
    [Required]
    public string Remarks  get; set; 

当我通过 Swagger 调用微服务中的 rest 端点以更新 Comment 模型而不加注释时,我得到如下响应正文:


  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": 
    "Remarks": [
      "The Remarks field is required."
    ]
  

太棒了!这是我所期望的......但是,当我通过我的 MVC 项目调用这个端点时,我似乎无法得到实际的“错误”。

这就是我调用其余端点的方式:

var client = _httpClientFactory.CreateClient("test");
HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(comment), Encoding.UTF8, "application/json"); 
HttpResponseMessage response = await client.PutAsync($"api/comments", httpContent);

响应对象只有一个statusCodeBadRequest。我想提取有关错误的信息(显示“需要备注字段”的部分。)但我在 ContentHeaders 属性或类似的东西中看不到它。

我是微服务和 .NET Core 的新手——我做错了什么吗?我需要向startup.cs 添加一些内容吗?我可以得到BadRequest 状态但没有支持问题的详细信息,这似乎很奇怪。

提前致谢!

【问题讨论】:

【参考方案1】:

确保您的 Web api 控制器未使用 [ApiController] 声明。

Web API 项目:

//[ApiController]
[Route("api/[controller]")]
public class CommentsController : ControllerBase

    [HttpPut]
    public IActionResult Put([FromBody] Comment model)
    
        if(ModelState.IsValid)
        
            //do your stuff...
            return Ok();
        
        return BadRequest(ModelState);
    

Mvc 项目:

HttpResponseMessage response = await client.PutAsync($"api/comments", httpContent);
var result = response.Content.ReadAsStringAsync().Result;

【讨论】:

谢谢!这使我找到了解决方案。我正在添加:response.EnsureSuccessStatusCode() 在响应返回后(忘记在原始帖子中提及),它正在消除错误详细信息。我在确定返回 BadResult() 或 Ok() 之前检查了 response.IsSuccessStatusCode,它现在可以工作了。

以上是关于从 ASP.NET MVC 项目调用 .NET CORE 5 Web API 微服务时无法检索 BadRequest 错误的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web API 从 MVC 4 控制器失败

Ajax 调用在我的 ASP.NET MVC 4 项目中偶尔返回 403 错误

Asp.net mvc 项目发布后给我内部服务器错误

Asp.net MVC 项目管理

ASP.NET从MVC5升级到MVC6

C# ASP.NET MVC:动态更新视图