不要在URL中显示操作 - 路由

时间:2012-02-17 15:17:37

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

我有一个带有Index()ViewResult的DirectoryController,它在视图中显示以下链接:

@Html.ActionLink("My file 1", "Index", "File", new { @id = "123" }, null) <br />
@Html.ActionLink("My file 2", "Index", "File", new { @id = "456" }, null) <br />
@Html.ActionLink("My file 3", "Index", "File", new { @id = "789" }, null) <br />

如果我点击其中一个链接,我最终会在网址中显示(例如)以下内容:

  

http://www.domain.com/File/Index/123

我真正想要的是URL中的以下内容:

  

http://www.domain.com/File/my-file-1

基本上,我想在URL中看到Controller名称和自定义名称(例如文件的名称),而不显示实际的操作 id

无论我单击哪个链接,所有这些链接都应该继续指向FileController的Index()方法,并传递相应的 id

我该怎么做?

我应该如何创建自定义路线?

由于

2 个答案:

答案 0 :(得分:1)

总体概述:

您要做的是创建路线映射

例如翻译用户友好的网址

您需要在您的controller / global.asax

中进行一些更新

路线的例子

  context.MapRoute(
              "FileNameMapping",
              "File/{filename}",
              new {controller="File", action = "Index" });

在您的行动中,您将拥有类似

的内容
Public FileResult Index(string filename){
// do your logic for handleling file name 
//and return file
}

答案 1 :(得分:0)

如果您要在IIS而不是Casini上运行此操作,则可以使用URL重写来实现所需的结果。