对文件的调用是在错误的文件路径中进行的

时间:2014-06-08 17:33:38

标签: asp.net-mvc

您好我正在尝试构建一个Angular App,我在ASP.NET MVC中遇到以下情况。 我在项目的根目录中创建了一个App文件夹,其中包含以下内容:

  • 样式文件夹
  • 脚本文件夹
  • 图片文件夹
  • index.html文件

然后我返回以下内容而不是在HomeController Index Action中返回一个View:

 public ActionResult Index()
 {
      return File(Server.MapPath("/App/index.html"), "text/html");
 }

index.html添加了以下样式:

   <link rel="stylesheet" href="styles/main.css">

当我运行应用程序时,index.html被检索但我在检索样式文件时遇到错误:

http://localhost:57826/styles/main.css 

出于某种原因,它不是在查看以下路径http://localhost:57826/App/styles/main.css,而是查看上面提到的路径。

然后我尝试拦截调用并通过创建这样的自定义路由器从正确的路径获取文件:

routes.MapRoute(
           name: "Style",
           url: "styles/{*path}",
           defaults: new { controller = "Www", action = "Style" }
       );

public class WwwController : Controller
{
    public ActionResult Style(string path)
    {
        byte[] content = this.GetContent(this.CorrectPath(path, "css"));
        var result = new FileContentResult(content, this.GetContentTypeFor(path));
        return result;
    }

    private string CorrectPath(string path, string folder)
    {
        return Server.MapPath("/App/" + folder + "/" + path);
    }

    private byte[] GetContent(string path)
    {
        byte[] readAllBytes = System.IO.File.ReadAllBytes(path);
        return readAllBytes;
    }

    private string GetContentTypeFor(string path)
    {
        return System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(path));
    }
}

但是我的解决方案似乎不起作用。没有调用样式动作。任何人都可以告诉我如何解决我的问题

1 个答案:

答案 0 :(得分:0)

为什么你不允许你的视图进行演示工作而打破MVC模型?只需这样做:

 public ActionResult Index() {
   return View();
 }

然后将您需要的任何内容放入Views / Home / Index.cshtml:

<link rel="stylesheet" href="styles/main.css">
@* Add link tags, javascript, etc. *@

或者只使用一个vanilla ASP.NET站点。