MVC3-маршрутизация всегда возвращает файл независимо от того, из какого каталога он запрашивается - PullRequest
1 голос
/ 10 октября 2011

Так что я нашел этот инструмент загрузки изображений в Интернете.Он довольно приятный, встроенный во флэш-память, изменяет размеры изображений перед загрузкой и т. Д. В принципе, это сэкономит мне много времени, если мне не придется реализовывать функциональность, которую он обеспечивает сам.

Все это выглядит довольно красивохорошо, за исключением того, что я хочу иметь возможность включать SWF-файл на несколько моих страниц с разными URL.Проблема в том, что предоставленный мне флэш-объект пытается загрузить XML-файл, который, как он ожидает, находится в том же каталоге, что и ваша веб-страница, и я не могу изменить каталог, в котором он ожидает этот файл. Поэтому мне было интересно, есть лиспособ сделать следующее.

Я использую MVC3 и хочу вернуть XML-файл независимо от того, откуда он запрашивается, как если бы вы запрашивали его напрямую.так что mysite.com/test.xml, mysite.com/someurl/test.xml, mysite.com/some/long/nested/url/test.xml все вернут test.xml, который на самом деле не находится ни в одном из этихместа, но в папке с общедоступным содержимым со всеми другими моими javascript и css файлами и т.д ...

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Я не проверял это, но попробуйте что-то вроде

routes.MapPageRoute("xmlroute", "{anything}.xml", "~/yourfile.xml");

или

routes.MapPageRoute("xmlroute", "{*}.xml", "~/yourfile.xml");

, или вы можете попробовать


routes.MapRoute(
    "xmlroute",
    "{whatever}.xml",
    new { controller = "FileHandler", action = "XmlFile"}
); 

Ваше действие контроллера может тогдапросто верните результат File (yourXmlFile).

0 голосов
/ 10 октября 2011

Сначала определите следующий маршрут перед маршрутом по умолчанию:

routes.MapRoute(
    "XML",
    "{*pathAndFile}",
    new { controller = "Content", action = "Index" },
    new { pathAndFile = @"^.+\.xml$" }
);

Далее создайте ContentController со следующим действием Index:

public ActionResult Index(string pathAndFile)
{
    var filePath = Request.MapPath("~/Content/" + pathAndFile.Split(new string[] { @"/" }, StringSplitOptions.None).Last());
    if (System.IO.File.Exists(filePath))
        return File(filePath, "text/xml");

    return null;
}

Это перенаправит любой запрос, заканчивающийся на ".xml", на ContentController, который проверит, существует ли файл xml, и будет обслуживать запрошенный файл, если он существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...