我想从
ProblemDetails
响应中渲染 Microsoft.AspNetCore.Mvc
(NoContent()
) 响应正文。
{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string"
}
根据文档,ProblemDetails,
ProblemDetails
不会从任何小于 400 的状态代码自动渲染。
我尝试过用
修改
Program.cs
builder.services.AddProblemDetails
ProblemDetailsFactory, etc.
(请参阅上面的文档链接)。
无论我做什么,我都没有运气得到204。
有人成功做过吗,可以吗?有没有正确方向的指点?
namespace Company.Controllers
{
[ApiController]
[Route("[controller]")]
public class ImportantController : BaseController
{
[HttpGet]
[ValidateModelState]
[Route("/api/important")]
[Produces("application/json")]
[ProducesResponseType(typeof(IEnumerable<ImportantDataResponse>), 200)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status204NoContent)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
public async Task<IActionResult> GetImportantData([FromQuery][Required] string dashboardId)
{
// ...
try
{
IEnumerable<ImportantDataModel> objResult = await _circuitBreakerPolicy.ExecuteAsync(() => _service.GetImportantData(dashboardId));
if (objResult.Count() > 0)
{
return Ok(objResult);
}
else
{
return NoContent();
}
}
catch (Exception ex)
{
throw;
}
return BadRequest();
}
}
}
我尝试使用中间件拦截方法,并自定义响应,但得到的结果是:“对于状态代码为 204 的响应,写入响应正文无效。”的异常,
根据HTTP状态码的定义,204状态码的意思是“No Content”,表示响应成功,但没有向客户端返回任何内容。因此,当您将响应状态码设置为204时,响应正文中设置的任何内容都不会被发送。
如果要指示资源未找到或不存在,可以使用
return NotFound();
404 状态码来指示。以下是一个示例,您可以作为参考:
[HttpGet]
[Route("/api/important")]
[Produces("application/json")]
[ProducesResponseType(typeof(IEnumerable<ImportantDataResponse>), 200)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetImportantData([FromQuery][Required] string dashboardId)
{
try
{
var objResult = new List<ImportantDataModel>
{
};
if (objResult.Count() > 0)
{
return Ok(objResult);
}
else
{
return NotFound();
}
}
catch (Exception ex)
{
throw;
}
return BadRequest();
}