我们假设我有以下行动方法:
TouchableOpacity
此操作应与两个不同的路径相关联:
[Route("option/{id:int}")] // routing is incomplete
public ActionResult GetOption(int id, bool advanced)
{
...
return View();
}
,.../option/{id}
。将这些路线表示为两个单独的网址非常重要,而不是具有可选查询字符串参数的相同网址。这些URL之间的唯一区别在于最后一个术语,这基本上是某种形式的指定。我需要的是一种设置路由规则的方法,告诉框架它应该为两种类型的请求调用相同的方法,作为'高级' 请求的第二个参数传递true ,否则为假。我需要将两个路由封装到一个操作方法中,这有很多原因。所以,不,我不能添加第二种方法来处理' advanced'请求单独。
问题是:如何设置此类路由?
答案 0 :(得分:1)
如果您能够更改第二个参数的类型
[HttpGet]
[Route("option/{id:int}")] // GET option/1
[Route("option/{id:int}/{*advanced}")] // GET option/1/advanced
public ActionResult GetOption(int id, string advanced) {
bool isAdvanced = "advanced".Equals(advanced);
//...
return View();
}
尽管你被认为有单独的行动,你可以简单地一个人打电话给对方以避免重复代码(DRY)
// GET option/1
[HttpGet]
[Route("option/{id:int}")]
public ActionResult GetOption(int id, bool advanced = false) {
//...
return View("Option");
}
// GET option/1/advanced
[HttpGet]
[Route("option/{id:int}/advanced")]
public ActionResult GetAdvancedOption(int id) {
return GetOption(id, true);
}