MVC3对C#可选参数做了什么?

设置以下控制器

public class HomeController : Controller { // GET: /Home/Read public string Read(Sample sample = null) { if (sample != null) Console.WriteLine("Not null"); else Console.WriteLine("null"); return ""; } } public class Sample { } 

样本不为空 。 这是一个错误还是一个function?

可选参数通过呼叫站点重写实现 。 由于MVC引擎将使用完整参数列表调用控制器,因此可选参数根本不相关。

例如,给定以下function:

 public void Foo(int bar = 1, int baz = 2) { } 

这样称呼它:

 Foo(); 

使编译器实际将其解释为:

 Foo(1, 2); 

没有任何魔法发生,因为调用保持为Foo() ,然后方法本身在运行时在参数中包含。 这些参数在编译时被编入,没有什么需要做的。

更新 :要向MVC指示给定路由参数是可选的,您可以在定义路径时将其设置为UrlParameter.Optional 。 此时,操作方法的默认参数值应该启动。

它的function不是bug。 绑定器看到方法签名是唯一有意义的方法(如果你定义一个没有参数我想象会被调用,或者你会得到’模糊调用’错误)并创建一个空实例,因为没有查询字符串参数可用。 由于它的模型绑定器在创建实例而不是编译器,所以它是MVC所做的。