我有一个用于 CSV 文件验证的简单 ASP.NET MVC 应用程序。用户输入文件的一些特征(文本框和一些复选框),然后浏览到他们想要上传的文件并点击提交。整个应用程序在我的本地计算机和内部 Web 服务器上都可以正常工作,但在放置在外部托管环境中时无法正常工作。以下是详细信息。
最初我机器上的文件内容被复制到服务器上。这意味着未启用 CSS 和 JS 的捆绑。应用程序页面会很好地呈现,并且提交也可以工作。但是,在提交文件后,应用程序根目录会更改。
我一直在使用视图中的以下代码位置检查应用程序根目录。
var applicationpath = '@Url.Content("~/")';
第一次渲染时,路径正确输出如下。
var applicationpath = '/folder1/folder2/folder3/appfolder/';
提交文件后,它变为。
var applicationpath = '/folder1/folder2/folder3/';
我已经与托管服务提供商核实过,他们已经在“appfolder”上设置了应用程序,而“folder3”只是 IIS 中的一个目录,并未设置为应用程序。
MVC 视图中的表单设置为通过以下方式发布。
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "wizard" }))
由于路径发生了变化,这显然会弄乱任何应该自动映射到根的 Razor 方法@Url.Action
。@Html.ActionLink
奇怪的是 CSS 和 JS 文件继续映射到渲染输出中。
毕竟,我决定尝试通过 Visual Studio 将应用程序发布到本地文件夹,然后将结果复制到托管服务提供商。这启用了 CSS 和 JS 文件的捆绑。现在,当我转到应用程序的根目录时,没有任何 CSS 或 JS 被下拉。我尝试获取捆绑的 JS 或 CSS 文件的路径并将其放入浏览器中,但出现 404 错误。渲染的输出如下所示:
<link href="/folder1/folder2/folder3/appfolder/Content/css?v=J7SZFaeCsOxTbb847HlSpnWlcb1lMDolldSj5wq-hdc1" rel="stylesheet"/>
不用说,我不知所措。我已经要求托管服务提供商告诉我他们安装了哪些 IIS 功能以及他们拥有哪些功能。见下文。