如何使用错误消息或异常返回NotFound() IHttpActionResult?

126

当WebApi的GET操作未找到内容时,我将返回一个NotFound IHttpActionResult。除此之外,我想发送自定义消息和/或异常消息(如果有)。当前的ApiControllerNotFound()方法不提供传递消息的重载选项。

有没有什么办法可以做到这一点?还是我必须编写自己的自定义IHttpActionResult


你想为所有的“未找到”结果返回相同的消息吗? - Nikolai Samteladze
@NikolaiSamteladze 不,这取决于情况可能会有不同的消息。 - Ajay Jadhav
13个回答

1
这里的答案缺少一个开发人员故事问题。ApiController类仍然公开了NotFound()方法,开发人员可能会使用它。这将导致某些404响应包含不受控制的结果正文。
我在这里介绍一些代码部分 "better ApiController NotFound method",它将提供一种不太容易出错的方法,不需要开发人员知道“发送404的更好方法”。
  • 创建一个继承自ApiController的类,名为ApiController
    • 我使用这种技术来防止开发人员使用原始类
  • 覆盖其NotFound方法,让开发人员使用第一个可用的API
  • 如果您想要阻止此操作,请将其标记为[Obsolete("Use overload instead")]
  • 添加一个额外的protected NotFoundResult NotFound(string message),以鼓励使用
  • 问题:结果不支持响应主体。解决方案:继承并使用NegotiatedContentResult。请参见附加better NotFoundResult class

1

我知道PO用信息文本提出了问题,但另一种选择是使该方法返回一个IHttpActionResult并使用StatusCode函数来返回404

    public async Task<IHttpActionResult> Get([FromUri]string id)
    {
       var item = await _service.GetItem(id);
       if(item == null)
       {
           StatusCode(HttpStatusCode.NotFound);
       }
       return Ok(item);
    }

0

需要返回404未找到的错误消息,我正在使用Dot Net 6.0。

这是代码

Problem(statusCode: 404, detail: "Put your detailed error message here");

其中Problem是ControllerBase类中的一个方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接