动作路径可选id参数

Ric*_*čík 5 c# asp.net asp.net-mvc routes

我正在尝试使用optional/id参数创建一个控制器操作,如下所示:

  1. 默认 http://localhost/tasks
  2. 与id http://localhost/tasks/42

这是控制器和动作:我试图做的是在动作上使用route属性

public class TasksController : AsyncController
{
    [Route("tasks/{id}")]
    public ActionResult Index(string id)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这有效,但只有在url中设置了id参数,但默认页面/tasks会抛出一个未找到的错误,或者在[Route("tasks")]没有id的情况下使用时,默认页面可以正常工作,但是当设置了id时,会再次抛出一个未找到的错误.我还尝试[Route("tasks/{id ?}")]将id标记为可选参数,但它不起作用.

任何想法如何使这项工作?

Bha*_*avO 7

您可以通过向路由参数添加问号来使URI参数可选.如果route参数是可选的,则必须为method参数定义默认值.

在操作方法上设置默认值,并在路径参数末尾添加问号.

[Route("tasks/{id?}")]
public ActionResult Index(string id =null)
Run Code Online (Sandbox Code Playgroud)