Я начал, сделав класс UrlHelperExtension, который построил мой URL любит этоMVC 4,5 URL.Action и маршруты
"/Home/DownloadFiles?directory="+directory+"&filename"+HttpUtility.UrlEncode(filename)
Но я понять, почему не использовать MVC, чтобы построить мои URL, так на мой взгляд, я сделал
href="@Url.Action("DownloadFiles","Home", new {directory = "files", filename="1.mp3"}"
но это выводит /Home/DownloadFiles/files/1.mp3, который не может найти файл (я получаю 404). мой метод действия
public ActionResult DownloadFiles(string directory, string filename){
//log which file is downloaded by who
//Add download header content-disposition attachement
//Send response with the file
return null;
}
и мой единственный маршрут выглядит следующим образом
routes.MapRoute(
name:"Default",
url: "{controller}/{action}/{directory}/{filename}",
defaults: new {controller = "Home", action = "Index", directory = UrlParameter.Optional, filename = UrlParameter.Optional}
)
Я думаю, что у меня есть некоторые вопросы, действительно понимающих маршруты, потому что я не знаю, как это исправить, поэтому я не должен использовать мой класс расширения, который на самом деле мало что делает. Может быть, я не должен использовать URL.Action? Будет ли Url.Action UrlEncode параметром имени файла? параметр каталога только 1 "глубокий", поэтому он не может быть abc/def только abc, и я добавляю к нему соответствующую часть, поэтому я не беспокоюсь об UrlEncoding.
'~/Главная/DownloadFiles/файлы/1.mp3' возвратит 200 OK для вас? –
Ty для вашего ответа. Я тоже получаю 404. он пытается найти файл не в том месте. мне нужно, чтобы он вызвал мой метод действий с соответствующими параметрами, а не искать файл в/Home/DownloadFiles/files, который obv не существует. – Narcil