如何在ASP.NET Core中返回自定义HTTP状态/消息而不返回对象,IActionResult等?

Eri*_*k T 2 c# asp.net-web-api swagger asp.net-core

我有一个ASP.NET Core Web API网站,启用了Swagger生成和UI。为了使Swagger起作用(至少自动起作用),必须键入controller方法的返回值。例如,

public async Task<Employee> LoadEmployee(string id)
Run Code Online (Sandbox Code Playgroud)

但是,我需要从此操作返回自定义HTTP状态代码和内容。我看过的所有示例都使用StatusCode方法,或返回其他一些对象。这样做的问题是Swagger不知道操作的返回类型是什么,因此无法生成API规范。

有什么方法(异常,控制器上的方法等)返回自定义代码/内容,同时保留签名?我已经看到了使用自定义中间件的解决方案,但是似乎很常见的情况是应该构建一些中间件。

小智 5

您可以只使用StatusCodeResult StatusCode(...)返回状态代码和消息/对象。

public async Task<ObjectResult> LoadEmployee(string id)
{
    var employee = await repository.GetById(id);
    if(employee == null) {
        return NotFound();
    }

    return StatusCode((int)HttpStatusCode.Ok, employee);
}
Run Code Online (Sandbox Code Playgroud)

  • 无法在Api中工作,只有1个状态参数,无法通过员工 (2认同)