Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在控制器方法中添加虚拟类作为参数?_C#_Asp.net Mvc_Asp.net Core_Asp.net Web Api - Fatal编程技术网

C# 如何在控制器方法中添加虚拟类作为参数?

C# 如何在控制器方法中添加虚拟类作为参数?,c#,asp.net-mvc,asp.net-core,asp.net-web-api,C#,Asp.net Mvc,Asp.net Core,Asp.net Web Api,我的控制器包含 [Route("/sales")] public IActionResult Index() { Model myModel = new Model(); return test(DateTime.Today, DateTime.Today, myModel); } 以及测试方法 [HttpPost] [ValidateAntiForgeryToken] [Route("/sales/{startDate}/{endDate}/{myModel}")

我的控制器包含

 [Route("/sales")]
 public IActionResult Index()
 {
     Model myModel = new Model();
     return test(DateTime.Today, DateTime.Today, myModel);
 }
以及测试方法

[HttpPost]
[ValidateAntiForgeryToken]
[Route("/sales/{startDate}/{endDate}/{myModel}")]
public IActionResult test(DateTime startDate, DateTime endDate, Model myModel = null)
{
    myModel ??= new Model();
    return View(myModel);
}
在页面加载时,一切正常。索引方法,将模型传递给测试函数

不幸的是,当AJAX post出现在

/sales/2020-05-14/2020-05-14/null
我得到一个内部服务器错误(500),这似乎是合乎逻辑的

但是我怎么能解决这个问题呢?是否有任何属性可以修饰可选参数
Model myModel=null

实际上,当从客户端调用此属性时,我想将其视为伪属性, 这就是我将其设置为空的原因。

方法、构造函数、索引器或委托的定义可以 指定其参数是必需的或是可选的。 任何调用都必须为所有必需的参数提供参数,但不能 省略可选参数的参数

由于
myModel
参数是可选的,所以可以在ajax调用中省略它。要省略此参数,还需要将此参数设置为路由中的可选参数


要将路由参数标记为可选,请使用“?”。所以它看起来是这样的:


    [HttpPost]
    [ValidateAntiForgeryToken]
    [Route("/sales/{startDate}/{endDate}/{myModel?}")]
    public IActionResult test([FromRoute] DateTime startDate, [FromRoute] DateTime endDate, [FromRoute] Model myModel = null)
    {
        myModel ??= new Model();
        return View(myModel);
    }


当您得到500错误时,您得到的例外是什么?可选参数可以用这种方式使用,有关详细信息,请参阅另一个SO。

    [HttpPost]
    [ValidateAntiForgeryToken]
    [Route("/sales/{startDate}/{endDate}/{myModel?}")]
    public IActionResult test([FromRoute] DateTime startDate, [FromRoute] DateTime endDate, [FromRoute] Model myModel = null)
    {
        myModel ??= new Model();
        return View(myModel);
    }