2011-10-10 70 views
1

所以我在網上發現了這個圖片上傳工具。它非常漂亮,內置閃存,在上傳之前會調整圖像大小等。如果我不必實現自己提供的功能,基本上可以節省大量時間。MVC3路由總是返回文件,無論它要求什麼目錄

這一切看起來都不錯,只是我希望能夠將swf文件包含在具有不同URL的多個網頁中。問題是給我的flash對象試圖加載一個xml文件,它希望與你的網頁在同一個目錄中,並且我無法改變它期望的文件所在的目錄。因此,我想知道是否有一個方法來做到以下幾點。

我正在運行MVC3,並且我想返回一個xml文件,無論它在哪裏請求,就好像您直接請求了它一樣。所以mysite.com/test.xml,mysite.com/someurl/test.xml,mysite.com/some/long/nested/url/test.xml將全部返回實際上並不駐留在這些實例中的test.xml的地方,但在一個公共文件夾的內容與我的所有其他JavaScript和CSS文件等等

回答

0

首先,默認路由之前定義以下路線:

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文件是否存在,並在請求的文件存在時提供。

+0

謝謝,這項工作很好,實際上超過了我認爲可以在這種情況下完成的工作。我真的很喜歡MVC3 ... –

1

我沒有測試過這一點,但你可以試試

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)結果。

相關問題