Asp.net mvc 如何在MVC2中使用路由在url中隐藏参数

Asp.net mvc 如何在MVC2中使用路由在url中隐藏参数,asp.net-mvc,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mvc Routing,我有网址: 我希望url如下所示: 如何隐藏操作名称(结果)和参数(Id、名称)。 我只是想躲起来,不想搬走。 id、名称和操作名称应传递给控制器。您无法删除该id。如果您将其从路由中删除,则无法再将其传递给服务器。你认为它会从哪里来?您可以使用以下SEO友好的url模式: http://www.abc.com/US/1111-11/abcd 就像StackOverflow处理问题一样。查看地址栏,您将看到: https://stackoverflow.com/questions/1537

我有网址:

我希望url如下所示:

如何隐藏操作名称(结果)和参数(Id、名称)。 我只是想躲起来,不想搬走。
id、名称和操作名称应传递给控制器。

您无法删除该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
你有身份证和名字

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

routes.MapRoute(
    name: "ResultsRoute",
    url: "us/{id}/{name}",
    defaults: new { controller = "Search", action = "Results" }
);
您可能遇到的下一个问题是名称是否包含一些特殊字符。Scott Hanselman在他的报告中详细解释了这一点。正确的解决方法是从名称中删除所有危险字符。这是StackOverflow使用的。因此,我们的想法是通过这个过滤函数传递名称,并生成一个所谓的slug,它对SEO友好,但在控制器操作中不需要,因为您已经有了相应的id:

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