【问题标题】:After add MapPageRoute to an asp.net mvc project, the site stops to enter in Home Controller将 MapPageRoute 添加到 asp.net mvc 项目后,站点停止进入 Home Controller
【发布时间】:2012-04-28 00:40:15
【问题描述】:

我正在尝试在我的 asp.net mvc 项目中路由一个 .aspx(webforms 页面)。我在 global.asax 中注册页面:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Reports/Tickets.aspx");
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

问题是,在我添加第二行之后,站点停止进入我的主控制器(索引操作)并重定向到:http://localhost:37538/Reports/Tickets?action=Index&controller=Login%22 总是我运行项目。

项目详情:

  • Asp.Net MVC 3
  • 表单验证
  • .Net 4.0

Obs:要重现此错误,请在 /WebForms/Reports 文件夹中创建 Tickets webforms 页面后,创建一个新的 asp.net mvc 项目作为 Internet 应用程序,然后注册新路由。运行项目(可能您已登录),现在注销,您将被重定向到http://localhost:35874/Reports/Tickets?action=LogOff&controller=Account,为什么?

【问题讨论】:

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


【解决方案1】:

已解决!因此,我们需要在 webforms 路由中添加路由约束,以确保它只捕获传入路由,而不是生成传出路由。

将以下类添加到您的项目中(在新文件中或 global.asax.cs 的底部):

public class MyCustomConstraint : IRouteConstraint{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){
        return routeDirection == RouteDirection.IncomingRequest;
    }
}

然后将Tickets路由更改为以下:

routes.MapPageRoute(
    "Tickets",
    "Reports/Tickets",
    "~/WebForms/Reports/Tickets.aspx",
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstraint() } }
);

【讨论】:

  • 谢谢!这解决了我在添加 MapPageRoute 后无法再登录页面的问题。登录页面上的提交按钮实际上将值发布到第一页路由。您是否有任何来源描述了这种行为及其背后的原因?
  • 但是具体关于你想要的,我没有。
  • +1 包括您的来源@ViniciusOttoni。当我即将失去耐心时,这帮助了我。我的问题是在不同项目的同一解决方案中调用 MapPageRoute 和 MapRoute;我试图混合使用 MVC 和 Web 表单。希望这可以帮助其他处于同样困境的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多