如何从mvc中的另一个目录打开html文件

时间:2012-11-28 09:46:08

标签: html asp.net-mvc

我在另一个目录中有一些html文件,包含一些javascripts,images和css。我想在我的网站中使用该文件,并限制用户访问该index.html链接。我在我的控制器操作中使用了返回File方法,但它无法在该目录上打开图像,因此它不起作用。什么是正确的解决方案?你有什么想法吗?

PS。 (当我调试代码时,我看到js,css和html文件可以使用正确的mime类型打开,除了jpg或png文件)

public ActionResult User(string name)
{
     string file = (Server.MapPath(Url.Content("~/Content/Users/" + name)));
     string path = Path.Combine(file);
     string mime = GetMimeType(path);
     return File(path, mime);
}



public string GetMimeType(string fileName)
 {
     string mimeType = "application/unknown";
     string ext = Path.GetExtension(fileName).ToLower();
     Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); 
     if (regKey != null && regKey.GetValue("Content Type") != null)
      {
        mimeType = regKey.GetValue("Content Type").ToString();
      }
     return mimeType;
 }

2 个答案:

答案 0 :(得分:0)

确保在调试过程中将以下值返回到图像扩展名:

.jpg/.jpeg => mime type: image/jpeg, 
 .png => mime type:image/png

您可以使用xml文件,其中每个文件扩展名都映射到其mime类型。这将确保您的系统可以处理所有可能的扩展。 This链接有一个建议的xml文件

答案 1 :(得分:0)

最好只查询IIS中的静态内容mime类型。这样,您就可以在一个位置管理它们。

using Microsoft.Web.Administration;
//--- stuff goes on ---//


ServerManager serverManager = new ServerManager();
var config = serverManager.GetApplicationHostConfiguration();
var staticContent = config.GetSection("system.webServer/staticContent");
var mimeMap = staticContent.GetCollection();
var mType =mimeMap.FirstOrDefault(a => (string) a.Attributes["fileExtension"].Value == ".pdf");
return (mType == null) ? "text/plain" : mType["mimeType"];