【问题标题】:how to hide parameter in url using routing in mvc 2如何使用mvc 2中的路由隐藏url中的参数
【发布时间】:2013-03-13 06:29:32
【问题描述】:

我有网址: http://www.abc.com/Results?Id=1111-11&Name=abcd

我想要如下网址: http://www.abc.com/US/Name/abcd

如何隐藏操作名称(结果)和参数(ID、名称)。 我只想隐藏不删除。 id、name 和 action name 应该传递给控制器​​。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing


    【解决方案1】:

    您无法删除该 ID。如果您将其从路由中删除,则无法再将其传递给服务器。你认为它会来自哪里?你可以做的是有以下 SEO 友好的 url 模式:

    http://www.abc.com/US/1111-11/abcd
    

    就像 StackOverflow 处理问题一样。查看地址栏,你会看到:

    https://stackoverflow.com/questions/15378465/how-to-hide-parameter-in-url-using-routing-in-mvc-2
    

    你有id和名字。

    为了实现这一点,您可以使用以下路由定义:

    routes.MapRoute(
        name: "ResultsRoute",
        url: "us/{id}/{name}",
        defaults: new { controller = "Search", action = "Results" }
    );
    

    您可能遇到的下一个问题是名称是否包含一些特殊字符。 Scott Hanselman 在他的blog post 中详细解释了这一点。解决这个问题的正确方法是从名称中删除所有危险字符。这是 StackOverflow 使用的for example the filtering function。所以想法是通过这个过滤函数传递名称并生成一个所谓的 slug,它对 SEO 友好但在您的控制器操作中不需要,因为您已经有了相应的 id:

    public ActionResult Results(int id)
    {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 2016-09-20
      • 2015-08-04
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多