【问题标题】:Configuring URL Routes in an asp.net hybrid (web forms and mvc) app在 asp.net 混合(Web 表单和 mvc)应用程序中配置 URL 路由
【发布时间】:2018-08-07 13:36:36
【问题描述】:

我有一个其他人已经开发过的应用程序,它最初是一个包含多个部分的 Web.forms 应用程序,现在正在转换为 MVC。有两部分已转到 MVC,其中一个工作正常,但另一个我遇到了路由问题。

路由在 .cshtml 中显示为:

<a href="@Url.RouteUrl("TableDetails", new { id=testTable.theId })@Request.Url.Query">Test Table</a>

该项目是 Web 表单,其中包含一个名为 Areas > TableProject > Controllers 的文件夹以及与 mvc 项目相关的其他文件夹。在控制器中有一个 HomeController.cs,它具有:

[HttpGet]
[Route("{id:int}/{seId:int?}", Name = "TableDetails")]
public ActionResult TableDetails(int id, int? seId)
{
    // code
}

路由文件是这样的:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.RouteExistingFiles = false;
        routes.IgnoreRoute("anotherproject/{*pathInfo}");

        routes.MapPageRoute(
            "WebFormDefault",
            string.Empty,
            "~/index.aspx");

        routes.MapRoute(
            "MvcDefault",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional });

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    }         

由于找不到 TableDetails 路由,我无法让表项目工作。另一个 MVC 项目工作正常。

错误是:

在路由集合中找不到名为“TableDetails”的路由。参数名称:名称

【问题讨论】:

  • 错误是:在路由集合中找不到名为“TableDetails”的路由。参数名称:名称

标签: c# asp.net .net asp.net-mvc routing


【解决方案1】:

您缺少注册属性路由的方法调用MapMvcAttributeRoutes。这意味着您的任何[Route] 属性都没有被注册。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.RouteExistingFiles = false;
    routes.IgnoreRoute("anotherproject/{*pathInfo}");

    // Register [Route] attributes
    routes.MapMvcAttributeRoutes();

    routes.MapPageRoute(
        "WebFormDefault",
        string.Empty,
        "~/index.aspx");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}

此外,MvcDefault 路由阻塞了对Default 路由的每次调用,使Default 成为无法访问的执行路径。详情请见Why map special routes first before common routes in asp.net mvc?。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多