1

我正在尝试将没有控制器的操作映射到特定操作,但是,我不想在 URL 中显示控制器。我使用如下所示的映射部分地实现了这一点:

        routes.MapRoute(
            null,
            "Contact",
            new { controller = "Home", action = "Contact" });

这成功地将在主控制器页面上发出的请求映射到

http://localhost:8082/Contact但是,如果在由不同控制器处理的不同页面上发出相同的请求,例如“NotHome”,我会收到页面未找到错误,因为搜索的路由是 NotHome/Contact。

提前感谢您提供的任何帮助或建议..

4

3 回答 3

1

尝试添加这条路线:

routes.MapRoute(
    "ContactsToHome",
    "{controller}/Contact",
    new { controller = "Home", action = "Contact" });

这会将控制器的任何Contact操作重定向到Home控制器。

于 2009-09-25T09:18:18.007 回答
1
routes.MapRoute(
                "Contact", 
                "{resource}/Contact",
                new {controller = "Home", action = "Contact"}
               );

不确定这是否是您想要做的,但这应该(如果添加到默认路由之上!),将所有联系操作请求(无论控制器如何)路由到控制器/操作的 Home/Contact 组合。

获取 /Contact 作为您的 URL

在首页/联系方式中添加

HttpContext context = HttpContext.Current;
context.RewritePath("~/Contact"); 

善良,

于 2009-09-25T09:18:31.657 回答
1

事实证明,解决方案很简单:

routes.MapRoute("ContactsTOHome", "Contact", new { controller = "Home", action = "Contact" });

路线映射很好,除了名称之外不需要更改。上面的路由在 URL 中隐藏了控制器但是我的问题在于调用动作:

"<%= Url.Action("Contact") %>">联系我们

上面的代码应该包括控制器和动作:

<%= Url.Action("Contact","Home") %>">联系我们

感谢您提供的所有帮助和建议。

关于 dan 的评论,我确实有一个后续问题:

HttpContext 上下文 = HttpContext.Current;context.RewritePath("~/Contact");

上面的代码没有编译,因为 HttpContext 不包含 Current 但是可以执行以下操作: HttpContext.RewritePath("~/Contact");

我的问题是为什么没有电流,为什么我放的代码行没有重写 url?

于 2009-09-25T11:13:44.780 回答