【问题标题】:Serving a local file in an ASP.NET MVC website在 ASP.NET MVC 网站中提供本地文件
【发布时间】:2010-11-17 19:28:18
【问题描述】:

假设我有一个位于C:\foo\bar.js 的文件,我想将此文件包含在一个显然托管在同一台机器上的 ASP.NET MVC 网站中。

这不起作用:

<script src="C:\foo\bar.js"></script>

这也不是:

<script src="file:///C:/foo/bar.js"></script>

以上两行也没有意义,因为它们会查看客户端的文件夹,而不是服务器的文件夹。

那么,如何从 ASP.NET MVC 控制器(在控制器中,我有本地物理文件的路径的字符串值,即C:\foo\bar.js)将该文件提供给视图?也许有 HttpHandler 的东西?

【问题讨论】:

  • 仅供参考:执行此操作时您可能会遇到浏览器安全问题。但是,如果您提供的网页依赖于文件位于用户磁盘上的特定位置...
  • 不,文件不会在用户磁盘上;我将提供的文件将在托管该站点的计算机上,但不在虚拟目录中,因此它们不会通过 Web 服务器公开。

标签: javascript asp.net-mvc httphandler


【解决方案1】:

注意:此解决方案假设 js 文件不是 Web 应用程序的一部分。如果是,您可能应该改用 Url.Content 或 ResolveClientUrl..

您应该能够在脚本标签中链接到控制器操作 URL:

<script src="/ControllerName/GetJavascriptFile"></script>

...并执行如下操作::

public ActionResult GetJavascriptFile() {
   string mp = @"C:\foo\bar.js";
   return File(mp, "text/javascript");
}

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.file(VS.90).aspx

【讨论】:

  • 为什么要通过控制器绕道?
  • 也许我看错了.. 但听起来脚本文件不是 Web 应用程序的一部分。否则包含一个脚本应该是微不足道的。
  • 这也是我的印象,因此 +1。 OP 似乎在询问如何包含 Web 服务器实际未公开的文件。
  • 是的,markt 和 David 都是正确的;我要提供的文件不是 Web 应用程序的一部分,因此不会通过 Web 服务器公开。
  • @Andreas:为什么要包含一个不属于 Web 应用程序的 JavaScript 文件?
【解决方案2】:

我一直这样做的方式是 - 假设您在根目录下有一个名为 Scripts 的文件夹(因此,与 ControllersModels 等平行)并且您将 JavaScript 文件存储在其中,你可以使用这个:

<script 
 src="<%=Url.Content("~/Scripts/jQuery-1.3.2.js")%>" 
 type="text/javascript">
</script>

(拆分成多行以便于阅读)

这是假设您的问题是如何链接到 .js 包含文件的位置,但类似的技巧可以应用于任何内容文件(即插件安装程序或诸如此类)

【讨论】:

  • 问题是我要提供的文件不是包含该站点的虚拟目录的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多