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);
}