【问题标题】:How do I return a custom HTTP response in an ASP.NET Core Controller?如何在 ASP.NET Core 控制器中返回自定义 HTTP 响应?
【发布时间】:2021-02-10 08:06:18
【问题描述】:

在 ASP.NET 核心 MVC 中,如何返回自定义 HTTP 响应以及自定义 HTTP 代码?我希望能够自己构建响应,最好从控制器返回。

  public IActionResult Index()
    {
          // set custom HTTP response and return
    }

....有人获取索引,我应该能够手动发送类似下面的响应,我可以控制响应的各个方面。我什至可以简单地返回我自己构建的字符串。

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed

如何在 ASP.NET Core MVC 中执行此操作?

【问题讨论】:

  • 您使用的是什么版本的 ASP.NET Core?您是来自ControllerBase 还是Controller
  • 您不能在响应中手动设置 all 标头,例如Content-LengthConnection: closed,顺便说一句。并且主机网络服务器通常会添加自己的Server: 标头(除非您专门配置外部网络服务器或反向代理服务器,否则您无法控制它)。此外,使用像 ASP.NET Core 这样的框架的全部意义在于避免弄乱 HTTP 的低级细节。
  • 这能回答你的问题吗? Best practice to return errors in ASP.NET Web API
  • @Mick 不是,这个问题只是询问如何返回状态码。我一直在寻找一种手动构建自己的响应并将其发送给客户的方法。

标签: c# asp.net asp.net-mvc http asp.net-core


【解决方案1】:

我意识到我有点眼熟,答案比我最初预期的要简单得多。

        public void Index()
    {
        Response.StatusCode = 200;
        Response.StartAsync();

        return;
    }

这允许人们自己简单地将数据添加到响应中并将它们发送到客户端。我正在使用 ASP.NET Core 3.1 MVC。

【讨论】:

  • "ASP.NET Core MVC" 在 ASP.NET Core 3 中并不存在。无论如何,如果您使用这种方法,那么您可能应该从 ControllerBase 派生而不是 Controller .
【解决方案2】:

改编来自here的答案...

public IActionResult Index()
{
    return StatusCode((int)HttpStatusCode.MovedPermanently);
}

另一个示例,如果您想在响应正文中传回 400 状态代码和验证错误...

public IActionResult Index()
{
    var validationErrors = _repository.Validate()
    return StatusCode((int)HttpStatusCode.BadRequest, validationErrors);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多