【问题标题】:asp.net mvc routing issue redirectasp.net mvc 路由问题重定向
【发布时间】:2012-12-05 06:20:14
【问题描述】:

我正在尝试创建一个重定向到 url 但无法让它为我的生活工作的路由。到目前为止,这是我所拥有的:

public class GoAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Go";
        }
    }

    public override void RegisterArea( AreaRegistrationContext context )
    {
        context.MapRoute(
            "Go/Issues",
            "go/issues/{issueID}",
            new { controller = "Go", action = "GoIssues" },
            new { issueID = @"\d+" }
        );
    }
}

和我的控制器:

public class GoController : Controller
{
    public ActionResult GoIssues( int issueID )
    {
      var version = getVersion( issueID );
      if( version != null )
      {
        string url = MakeUrl(version, issueID);

        // Redirect to the right url
        return Redirect( url );
      }
    }

    // not found
    return HttpNotFound();
  }
}

这样做的重点是确定要重定向到的正确版本并重定向到那里。但是由于某种原因 go/issues/123 给了我一个 404 not found 。我使用了路由调试工具,它显示这条路由被命中,但是当我禁用它时,我又回到了 404。

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc routes


    【解决方案1】:

    尝试将您的路线放在全局路线配置中而不是区域注册中,看看是否有效。

    我已尝试在我的测试项目中使用您的配置,它运行良好。如果这仍然不起作用,我建议从小处着手并使其起作用,然后慢慢将您的路由配置添加到它上面,直到它中断为止。

    【讨论】:

    • 谢谢,但除此之外,区域注册对我有用。
    【解决方案2】:

    如果其他人有同样的问题,我已经找到了答案。

    经过大量谷歌搜索,我发现以下文章解释了路由的工作原理。

    http://blog.davebouwman.com/2011/12/08/asp-net-mvc3-and-404s-for-area-controllers/

    文章说 ASP.NET 期望命名空间是某种格式:

    问题是我的控制器上的命名空间。事实证明,MVC 有一个约定,区域名称应位于控制器的命名空间中。

    所以 - 我有 StatsMe.API.CategoriesController,但 MVC 正在寻找 StatsMe.Areas.API.CategoriesController。

    最终让我知道的是 RouteDebugger 输出中的一些内容……

    很烦人,因为错误消息真的可以通过说“嘿 - 我正在寻找 StatsMe.Areas.API.CategoriesController 但我找不到它”来提供帮助,而不是它吐出的非常笼统的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 2011-11-30
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多