我有一个简单的ASP.NET MVC应用程序用于CSV文件验证。用户输入一些关于文件的特征(文本框和一些复选框),然后浏览到他们想要上传的文件并点击提交。整个应用程序在我的本地机器上以及在内部Web服务器上都能正常工作,但在放置在外部托管环境中时无法正常工作。以下是详细信息。提交的ASP.NET MVC应用程序根目录更改
最初我的机器上的文件内容被复制到服务器。这意味着未启用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" }))
因为路径的变化,这种明显弄乱任何@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功能。见下文。
很少有问题:1)您控制的文件夹1,2,3文件夹还是您的主机提供商? 2)你的控制者在帖子上做了什么? – TSmith
说实话,我没有上传这些文件,但是这是由公司的图形设计领域的人员完成的。话虽如此,我们可能能够控制一些文件夹结构,但不太可能。我知道我们无法访问IIS来修改这些类型的设置。 – amrinea
控制器接受模型和HttpPostedFileBase。从那里它打开文件InputStream,加载它,然后做一堆检查。最后,这可能是你最感兴趣的部分,它在ViewBag中设置一个属性,然后'返回View(“Index”,du);'这将把它们带到它们开始的相同视图。地址栏变为“/ folder1/folder2/folder3/appfolder/Home/Upload”。 – amrinea