【问题标题】:Hide url Controller and Action - Asp.NET MVC5隐藏 url 控制器和操作 - Asp.NET MVC5
【发布时间】:2017-08-10 16:35:37
【问题描述】:

我想保留相同的服务器 url。例如:10.139.183.192 到所有页面。

我不想显示 10.139.183.192/Task/Create

当用户在地址栏输入时,路由必须继续。但我想隐藏它。

我一直在搜索有关 url 重写的很多内容,但我找不到解决方案。

我已尝试更改全局 asax、注册路由等。

我应该在 IIS 服务器还是应用程序中进行更改?

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 }
    );
}

【问题讨论】:

  • 真的不可能做到这一点。服务器如何知道路由请求?当然,您可以编写一些自定义路由以根据查询参数而不是 URL 段进行切换(如下所示)——但这真正让您得到什么?可能只是一堆错误的自定义代码......也许告诉我们你为什么试图隐藏路由信息。
  • 如果我可以问,这种一直保持相同路线的愿望背后的原因是什么?技术还是美学?

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


【解决方案1】:

您可以在 Home Controller 上处理所有页面并根据帖子返回 View,例如:

public ActionResult Home()
{
    string page = Request["page"];
    switch (page)
    {
        case "Home":
            return View();
            break;
        case "Product":
            return View("Product");
            break;
        default:
            return View();
            break;
    }

    return View();
}

用户访问所有控制器,你编写 JS 来更改 URL,如下所示:

window.onload = function(){
    window.history.pushState("", "", "/");
}

【讨论】:

    【解决方案2】:

    如果您使用诸如Angular.JS 之类的客户端框架,您只能在本机上执行此操作。

    在 C#.NET MVC5 中,我只想到了三个想法。

    • 使用 AJAX 更改页面内容而无需转到其他页面
    • 第二,你使用自制路由like @Rodolfo said
    • 第三个也是最后一个(这是最奇怪的一个),您不是在 GET 中调用页面,而是在传递 POST 数据(为每个链接创建一个 FORM)中调用页面,因此基本路由可以根据表单数据控制显示的内容。这使您始终可以定位到相同的 URL 10.139.183.192,这与 URL 会更改的点(GET 参数)不同。

    就个人而言,我认为您想要实现的目标应该是使用专用的客户端框架(它们是为此而设计的,但我相信它是 JavaScript,而不是 C#)或使用 Ajax 方法。

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      相关资源
      最近更新 更多