MVC3路由总是返回文件,无论它请求的目录是什么

时间:2011-10-10 14:16:11

标签: flash asp.net-mvc-3 iis

所以我在网上找到了这个图片上传工具。它很漂亮,内置闪存,会在上传之前调整图像大小等。基本上,如果我不必实现它自己提供的功能,它将为我节省大量时间。

除了我希望能够在我的几个具有不同URL的页面上包含swf文件之外,它看起来都很不错。问题是给我的flash对象试图加载一个xml文件,它希望与你的网页在同一个目录中,而且我无法更改它所期望的文件所在的目录。因此我想知道是否有一个如何做到以下几点。

我正在运行MVC3,我想返回一个xml文件,无论它在哪里请求,就像你直接请求它一样。所以mysite.com/test.xml,mysite.com/someurl/test.xml,mysite.com/some/long/nested/url/test.xml都将返回实际上并不存在于其中任何一个中的test.xml在公共内容文件夹中放置所有其他javascripts和css文件等...

2 个答案:

答案 0 :(得分: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)结果。

答案 1 :(得分: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,ContentController将检查xml文件是否存在,并将提供所请求的文件(如果存在)。