属性路由MVC 5中出错



我试图用多个可选参数路由操作,但它不起作用。我正在分享我的代码,请指导我。

[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

如果link有任何可选参数,我希望它能工作。请指导我

这不起作用,因为路由不知道将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

您可以指定'alpha'作为@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();
}

这对两种情况都有效。我更喜欢这个,因为我不必一次又一次地修改我的路线。

最新更新