具有不同控制器操作方法的相同路由参数导致 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();
}