如何在 ASP.NET MVC3 中通过 HTTPS 提供静态文件(在 ~/Content 中)

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC3 中通过 HTTPS 提供静态文件(在 ~/Content 中)【英文标题】:How to Serve Static Files (in ~/Content) Via HTTPS in ASP.NET MVC3 【发布时间】:2013-09-18 16:39:21 【问题描述】:

我有一个 ASP.NET MVC3 应用程序,我刚刚添加了一个区域。区域内的链接(到图像、javascript 文件、CSS 等)默认为 https。但是,MVC 似乎并未通过 https 提供 ~/Content 目录内的静态内容。

我仔细研究了 Internet 文档,但没有发现有关 MVC 如何以不同方式处理 ~/Content 目录的信息,或者如何让它通过 https 提供静态文件。

我希望它会像 Web.config 条目一样简单,上面写着“允许通过 https 提供静态文件”,但我没有找到这样的东西。

我想出的唯一选择是编写一个自定义控制器来提供我的静态内容,但这似乎非常错误。我错过了什么?

更新:为了回答 Joe 在下面的问题,视图本身是通过 https 提供的。对于静态内容,例如 JavaScript 文件,我使用的是没有协议或域的绝对 URL。例如:

<script "/Areas/Admin/Content/js/jquery.js"></script>

因为页面的协议是https,所以浏览器正在请求https://localhost:5300/Areas/Admin/Content/js/jquery.js(自然)。将协议设置为 http 并正确提供该文件:将其设置为 https,我得到一个错误。

更新:我愚蠢地没有仔细阅读错误。里面有更多的细节,但它仍然让我感到困惑。我尝试访问https://localhost:5300/Areas/Admin/Content/js/jquery.js 时遇到的错误是:

Parser Error Message: An error occurred loading a configuration file: 
Failed to start monitoring changes to
'C:\Users\ethan\Documents\gitwork\SampleWebSite\admin\content\web.config'
because access is denied.

为什么要在那个目录中寻找 Web.config 文件?

【问题讨论】:

所以它正在使用包括http:// 在内的完整URL 写出标记?看起来有点奇怪——当我在页面上放置内容时,MVC 总是给我相对路径,所以相对路径将使用与页面相同的协议。你能提供一个imgscript 或任何标签的例子吗? 我对错误一无所知 - 这很奇怪。 【参考方案1】:

一个简单的解决方案是不要使用“~”

【讨论】:

以上是关于如何在 ASP.NET MVC3 中通过 HTTPS 提供静态文件(在 ~/Content 中)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中通过 Ajax 提交表单?

如何在我的 ASP.NET 项目中通过 Revox 设置 Pages 管理面板仪表板模板?

在 ASP.NET 代码中通过 javascript 重置 Jquery 验证后停止回发

如何在 ASP.net MVC3 中获取 Advantage Database 数据?

Asp.net MVC3.0用Razor视图如何实现URL伪静态?真诚求教。

如何使用 ASP.NET MVC3 编辑嵌套模型