C# Visual Studio 2015:MVC 6脚手架切换到使用IActionResult和ActionResult交互

C# Visual Studio 2015:MVC 6脚手架切换到使用IActionResult和ActionResult交互,c#,asp.net-mvc,visual-studio-2015,asp.net-core-mvc,C#,Asp.net Mvc,Visual Studio 2015,Asp.net Core Mvc,我刚刚安装了VS 2015,我注意到MVC6的自动支架有一些变化。我很好奇为什么微软做出了这些改变,因为我认为如果他们决定做一些改变,可能会有一些我不知道的好处 在VS 2013中,MVC 5自动脚手架始终使用:ActionResult 在VS 2015中,MVC 6自动脚手架转换为使用:IActionResult 在VS 2015中,我注意到微软团队不愿意再这样做了: public class Test{ private int i; public Test (int i

我刚刚安装了VS 2015,我注意到MVC6的自动支架有一些变化。我很好奇为什么微软做出了这些改变,因为我认为如果他们决定做一些改变,可能会有一些我不知道的好处

在VS 2013中,MVC 5自动脚手架始终使用:ActionResult

在VS 2015中,MVC 6自动脚手架转换为使用:IActionResult

在VS 2015中,我注意到微软团队不愿意再这样做了:

 public class Test{
     private int i;
     public Test (int i){
         this.i = i;
     }
 }
而在所有生成的类中,我看到它们确实:

 public class Test{
     private int _i;
     public Test (int i){
         _i = i;
     }
 }

如果这只是编码风格的问题,我会立即对他们为什么改变这一点失去兴趣,但如果这背后有任何逻辑解释,我迫不及待地想知道那是什么。

关于你的ActionResult问题,在以前的ASP.NET中,MVC控制器使用System.Web.MVC.Controller父类,Web API控制器使用System.Web.Http.ApicController父类

但在ASP.NET 5 MVC 6中,它们已将两者合并到一个web应用程序中。所以现在只有一个控制器类Microsoft.AspNet.Mvc.controller类作为它们的基础。
现在要区分它们,当用作MVC控制器时,IActionResult可能是一个视图。当用作Web API控制器时,IActionResult可能是数据(JSON/XML)。同一个控制器可能具有同时返回视图和数据的操作。

不确定您的
测试问题,但对于
ActionResult
vs
IActionresult
,我假设它们遵循约定,
IActionresult
是一个接口。。因此,您获得了编码到接口而不是类的所有优势,即能够在运行时之前更改返回类型,而不知道返回类型是什么。例如,假设
JsonResult
implemented
IActionResult
,那么您可以构建与上面相同的代码,但是,在不更改方法签名的情况下,可以轻松地将返回类型从
ActionResult
更改为
JsonResult
。他们将ActionResult抽象出来,因此没有具体的实现,因此您可以使用任何类,只要它继承自IActionresult接口。我相信这是两个问题。第一个是关于IActionResult的,第二个是关于私有变量命名约定的。这两个测试类产生相同的CLR代码(除了元数据说“有一个名为_i的字段”而不是“有一个名为i的字段”)。虽然更改很小,但我喜欢它--下划线约定消除了许多难以检测的bug,其中您有
I=value
,但需要
this.I=value