Не отображать действие в URL - Маршрутизация - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть DirectoryController с Index () ViewResult, который отображает следующие ссылки в представлении:

@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 />

Если я нажму на одну из ссылок, у меня будет (например)следующее в URL:

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

То, что я действительно хотел бы иметь, это следующее в URL:

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

По сути, я хотел бы видеть имя контроллера и пользовательское имя (например, имя файла) в URL, не показывая фактическое действие или id .

Независимо от ссылки, по которой я нажимаю, все они должны продолжать указывать на метод Index () FileController, передавая соответствующий id .

Как мне поступить?

Как и какой пользовательский маршрут я должен создать?

Спасибо

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Как общий обзор:

, что вы хотите сделать, это создать отображение маршрута

например, перевод URL-адреса, который удобен для пользователя

вам нужно будет сделать некоторые обновления в вашем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
}
0 голосов
/ 18 февраля 2012

Если вы будете использовать это на IIS, а не на Casini, вы можете использовать перезапись URL для достижения желаемого результата.

...