如何在 ASP.NET Core 控制器中返回自定义 HTTP 响应?
Posted
技术标签:
【中文标题】如何在 ASP.NET Core 控制器中返回自定义 HTTP 响应?【英文标题】:How do I return a custom HTTP response in an ASP.NET Core Controller? 【发布时间】: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-Length
和Connection: closed
,顺便说一句。并且主机网络服务器通常会添加自己的Server:
标头(除非您专门配置外部网络服务器或反向代理服务器,否则您无法控制它)。此外,使用像 ASP.NET Core 这样的框架的全部意义在于避免弄乱 HTTP 的低级细节。
这能回答你的问题吗? Best practice to return errors in ASP.NET Web API
这是***.com/questions/37690114/…的副本
@Mick 不是,这个问题只是询问如何返回状态码。我一直在寻找一种手动构建自己的响应并将其发送给客户的方法。
【参考方案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);
【讨论】:
以上是关于如何在 ASP.NET Core 控制器中返回自定义 HTTP 响应?的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net Core 3.1-如何从控制器返回到 Razor 页面?
ASP.Net Core 2.0 - 如何从中间件返回自定义 json 或 xml 响应?