Я столкнулся с какой-то странной проблемой.Это странно для меня, потому что я этого не понимаю и потому что раньше все работало нормально.Итак, моя задача - вызвать контроллер и передать ему имя файла (с расширением), и контроллер должен распознать этот файл, записать его в журнал и затем вернуть сам файл, если он существует (в папке «Загрузки»).Что я делаю:
public class DownloadController : Controller
{
public ActionResult Files(string id)
{
string filePath = Server.MapPath(Url.Content(string.Format("~/Downloads/{0}", id)));
string serverPath = Url.Content(string.Format("~/Downloads/{0}", id));
string ext = Path.GetExtension(filePath);
if (!System.IO.File.Exists(filePath))
{
//return to the error controller
}
string mem = "text/html";
if (ext == ".zip")
{
mem = "application/x-zip-compressed";
}
else if (ext == ".html" || ext == ".htm")
{
mem = "text/html";
}
else if (ext == ".pdf")
{
mem = "application/pdf";
}
//Save info about downloads into DB
repStat.SaveStatInfo(id, HttpContext.Request.UserHostAddress,
HttpContext.Request.UserHostName, HttpContext.Request.UserAgent);
return File(serverPath, mem, id);
}
}
Есть часть Global.asax:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("Content/{*pathInfo}");
У него больше нет "игнорирует".
Так, проблема в том, что когда я делаю вызов: mysite.com/download/files/test.pdf сервер возвращает мне «Страница не найдена».Конечно, нет такого файла в пути загрузки / файлов!Он должен вызывать контроллер, но не реальный файл.Как только я удаляю расширение вроде mysite.com/download/files/test, сервер вызывает контроллер.Я не понимаю, почему он не распознает имя файла просто как параметр и пытается найти файл.
Поведение абсолютно такое же, если я пытаюсь сделать это с другими контроллерами - как только параметр нене имеет никакого расширения, оно работает хорошо, иначе сервер ищет файл.
Самое странное, что все работает хорошо локально, но не работает на сервере (работал не долго, но потом остановился).