为什么返回 null 在 web api 项目中没有任何作用?

4 c# .net-core asp.net-core

我是 asp.net core 3 的新手,很抱歉,如果我的问题听起来太基本了,下面是我的控制器类:

[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase {
   List<string> _fruit = new List<string> { "Pear", "Lemon", "Peach" };
  
   [HttpGet("fruit")]
   public IEnumerable<string> MethodXXX() {
      return _fruit;   
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

所以当我路由到 时my/fruit,我得到一个字符串列表。

但如果我将 MethodXXX 更改为:

[HttpGet("fruit")]
public IEnumerable<string> MethodXXX() {
   return null;
}
Run Code Online (Sandbox Code Playgroud)

然后浏览器总是回退到以前的网址,例如我一my/other开始就在,然后我将网址更改为my/fruit,我可以看到浏览器发送了一个新请求,并且网址my/fruit在短时间内更改为 ,然后它再次落回my/other

这种行为是为了什么?我很确定我读过一本书,上面说你可以从操作方法返回 null?

Nik*_*hta 7

这是 .Net Core 3 中新引入的行为,如果 Action 方法返回 null,则它仅发送表示无内容的 204 响应。如果您希望从操作方法返回 null,则可以通过在 Startup.cs 文件中使用以下代码块来覆盖此行为,该代码块会删除相应的输出格式化程序,并且您将从 API 响应中返回 null。

services.AddControllers(options =>
        {
            options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
        });
Run Code Online (Sandbox Code Playgroud)

  • 答案就在这里:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204 如果您打开此内容,第一行会显示“HTTP 204 无内容成功状态响应代码表明请求已成功,但客户端不需要离开当前页面。” 这就是为什么它不会导航到另一条路线。由于它不导航,因此看起来它会回退到与以前相同的 URL,但它不会显式发送另一个回退请求,而只是保留在与以前相同的页面上。 (2认同)