我正在尝试使用多个可选参数来路由操作,但它无法正常工作。我正在分享我的代码,请指导我。
[HandleError]
[RouteArea("Admin", AreaPrefix = "sp-admin")]
[RoutePrefix("abc-system")]
[Route("{action}")]
public class AbcController : Controller
{
[Route("list/{id:int?}/{PersonID?}/{ref?}")]
public async Task<ActionResult> Index(int? id, int? PersonID, string @ref)
{
return view();
}
}
这不会像这样工作 http://anylocallink.com/sp-admin/abc-system/list/2/details 但是像这样工作 http://anylocallink.com/sp-admin/abc-system/list/2/3/details
如果链接包含任何可选参数,我希望它能够正常工作。 请指导我
答案 0 :(得分:0)
这不会起作用,因为该路线不知道放置int
参数的位置。你可以做这样的事情
[Route("list/{type}/{id}/{ref?}")]
public async Task<ActionResult> Index(string type, int id, string @ref)
{
if(type == "Person"){ ... }
else { ... }
return View();
}
然后你可以为路线
这样做list/Person/1/Details
list/ID/2/Details
答案 1 :(得分:0)
您可以指定&#39; alpha&#39;作为@ref动作参数的约束,并有两个如下的动作:
[Route("list/{id:int?}/{ref:alpha?}")]
public async Task<ActionResult> Index(int? id, string @ref)
{
return await Index(id, null, @ref);
}
[Route("list/{id:int?}/{personId:int?}/{ref:alpha?}")]
public async Task<ActionResult> Index(int? id, int? personId, string @ref)
{
return View();
}
这适用于两种方案。我更喜欢这个,因为我不需要 一次又一次地修改我的路线。