- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
两者最终都会产生一个空的 204 状态响应,但哪个更快?
显然,如果你遵循 DRY 指南,写起来会更干净
return Ok(something);
if (something == null)
{
return NoContent()
}
else
{
return Ok(something);
}
NoContent()
转换为调用
StatusCode(204)
, 至于
Ok(null)
我没有深入了解他们究竟在哪里检查(如果他们这样做的话)是否为空值,如果它为空,则决定返回一个 StatusCode 204(或以其他方式处理它)。
NoContent()
将产生更快的性能,即使我们将要讨论的差异只有几分之一秒。
最佳答案
当您调用 return NoContent()
时,它会返回 StatusCodeResult
NoContentResult
。
当要执行 StatusCodeResult
时,它所做的只是 setting the status code on the response :
public override void ExecuteResult(ActionContext context)
{
// snip boilerplate code
context.HttpContext.Response.StatusCode = StatusCode;
}
return Ok(something)
时,实际返回的是
OkObjectResult(something)
。顾名思义,
OkObjectResult
就是
ObjectResult
。
ObjectResult
,则为
the registered IActionResultExecutor<ObjectResult>
is resolved and ExecuteAsync()
is called 。
ObjectResultExecutor
。它的
ExecuteAsync()
将其格式化程序选择(即,用于将提供的 ObjectResult 实际写入线路的已注册格式化程序)卸载到恰当命名的
OutputFormatterSelector
,并将其注入(inject)其构造函数中。
DefaultOutputFormatterSelector
。现在这个类
pulls its output formatters 来自
MvcOptions.OutputFormatters
,它在
default configuration 中包含:
true
for CanWriteResult()
。如果
HttpNoContentOutputFormatter
设置为
TreatNullValueAsNoContent
(默认情况下),并且要返回的
Object
是
null
,那么它确实会返回。
WriteAsync()
:
public Task WriteAsync(OutputFormatterWriteContext context)
{
var response = context.HttpContext.Response;
response.ContentLength = 0;
if (response.StatusCode == StatusCodes.Status200OK)
{
response.StatusCode = StatusCodes.Status204NoContent;
}
return Task.CompletedTask;
}
Ok(null)
返回 204 而不是 200 是
up for debate ;您可以在启动时使用以下代码选择退出:
services.AddMvc(options =>
{
var noContentFormatter = options.OutputFormatters.OfType<HttpNoContentOutputFormatter>().FirstOrDefault();
if (noContentFormatter != null)
{
noContentFormatter.TreatNullValueAsNoContent = false;
}
});
关于c# - ASP.NET Core 中的 Ok(null) 与 NoContent() 哪个更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59861379/
返回 NoContent 响应时 DELETE HTTP 操作的正确返回类型是什么? [HttpDelete] [ProducesResponseType(StatusCodes.St
返回 NoContent 响应时 DELETE HTTP 操作的正确返回类型是什么? [HttpDelete] [ProducesResponseType(StatusCodes.St
我正在使用 .NET MVC。 当我回来时new HttpResult(HttpStatusCode.NoContent);创建的对象具有状态代码 = 200: {ServiceStack.Commo
我正在使用 Jersey (1.18) 为我的 Web 应用程序构建 REST API。在我的部分代码中,我有以下代码片段。 return Response.status(Status.NO_CONT
两者最终都会产生一个空的 204 状态响应,但哪个更快? 显然,如果你遵循 DRY 指南,写起来会更干净 return Ok(something); 而不是 if (something == null
在我的 ASP.NET MVC 应用程序 Controller 中处理请求并返回状态代码为 200 的特定 View 。当它到达 Application_EndRequest 时,它已经是 204。我
我是一名优秀的程序员,十分优秀!