具有不同控制器操作方法的相同路由参数导致 Asp .Net MVC 中的错误
Same route parameters with different controllers' action methods causes an error in Asp .Net MVC
我正在使用 Asp .Net Mvc 的属性路由功能。
我的第一个动作如下所示,放在 SurveyController
中
[Route("{surveyName}")]
public ActionResult SurveyIndex()
{
return View();
}
我的第二个动作如下所示,放在 MainCategoryController
[Route("{categoryUrlKey}")]
public ActionResult Index(string categoryUrlKey)
{
return View();
}
我没有使用基于约定的路由。
下面是我的 RouteConfig。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.MapAttributeRoutes();
}
现在的问题是,当我点击一项调查时,它会重定向到 MainCategory/Index 路线。我知道这是因为相同的路线模式,但我无法将其更改为另一件事。
我该如何处理这种情况?
谢谢
您应该在 MainCaregoryController
上为路由添加前缀,或者在控制器级别,如下所示:
[RoutePrefix("category")]
public class MainCategoryController : Controller {
或在动作层面是这样的:
[Route("category/{categoryUrlKey}")]
public ActionResult Index(string categoryUrlKey)
{
return View();
}
路由不应冲突。这条路线:
[Route("{categoryUrlKey}")]
public ActionResult Index(string categoryUrlKey)
{
return View();
}
匹配 任何 字符串并将该字符串值传递到操作中,因此没有前缀它将匹配:
http://localhost/validcategorykey
和
http://localhost/something/id/isthispointmakingsense
并且您的 categoryUrlKey
参数在第一个实例中等于 "validcategorykey"
,在第二个实例中等于 "something/id/isthispointmakingsense"
。
现在这条路线:
[Route("{surveyName}")]
public ActionResult SurveyIndex()
{
return View();
}
这只是行不通。这需要更改为:
[Route("survey/{surveyName}")]
public ActionResult SurveyIndex(string surveyName)
{
return View();
}
我正在使用 Asp .Net Mvc 的属性路由功能。 我的第一个动作如下所示,放在 SurveyController
中 [Route("{surveyName}")]
public ActionResult SurveyIndex()
{
return View();
}
我的第二个动作如下所示,放在 MainCategoryController
[Route("{categoryUrlKey}")]
public ActionResult Index(string categoryUrlKey)
{
return View();
}
我没有使用基于约定的路由。 下面是我的 RouteConfig。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.MapAttributeRoutes();
}
现在的问题是,当我点击一项调查时,它会重定向到 MainCategory/Index 路线。我知道这是因为相同的路线模式,但我无法将其更改为另一件事。 我该如何处理这种情况? 谢谢
您应该在 MainCaregoryController
上为路由添加前缀,或者在控制器级别,如下所示:
[RoutePrefix("category")]
public class MainCategoryController : Controller {
或在动作层面是这样的:
[Route("category/{categoryUrlKey}")]
public ActionResult Index(string categoryUrlKey)
{
return View();
}
路由不应冲突。这条路线:
[Route("{categoryUrlKey}")]
public ActionResult Index(string categoryUrlKey)
{
return View();
}
匹配 任何 字符串并将该字符串值传递到操作中,因此没有前缀它将匹配:
http://localhost/validcategorykey
和
http://localhost/something/id/isthispointmakingsense
并且您的 categoryUrlKey
参数在第一个实例中等于 "validcategorykey"
,在第二个实例中等于 "something/id/isthispointmakingsense"
。
现在这条路线:
[Route("{surveyName}")]
public ActionResult SurveyIndex()
{
return View();
}
这只是行不通。这需要更改为:
[Route("survey/{surveyName}")]
public ActionResult SurveyIndex(string surveyName)
{
return View();
}