为什么我的MVC项目在发布后不会起作用?

cam*_*elt 6 asp.net asp.net-mvc publish windows-server-2008

我最近将我的第一个MVC 2项目发布到商业Web服务器上,运行Windows 2008,并据称支持其他MVC站点没有问题,但一直遇到一些问题.这是该项目的高级结构.如您所见,它非常简单:

但是,在网站发布后,我导航到URL,我得到"HTTP错误403.14 - 禁止访问:Web服务器配置为不列出此目录的内容."

所以,我联系了网络主机,并告诉我必须包含一个默认的登陆页面,例如Default.aspx,Index.aspx等.我怀疑这个响应是准确的,因为我认为MVC路由会处理这个问题,但我按照建议做了,在Default.aspx.cs代码隐藏中添加了一个重定向到我的家庭控制器,但得到了一个HTTP错误404.我添加了每个建议的重定向,类似于本文中的建议:http:// www .58bits.com/blog/CommentView,guid,10b2ddfa-057c-41d0-bdc7-564b212ce896.aspx.

我已经和网络主持人一起来回讨论了这个问题超过一个星期,大约有十几个不同的回答和答案,但我还是找不到解决方法.我确信这是一个很容易解决的问题,但我不知道下一步该尝试什么,或者建议接下来尝试的网络托管支持.

Soooo ......知道StackOverflow社区比我聪明,我的网络托管公司的支持技术结合了一千倍,我希望你能帮我解决这个问题,所以我可以成功发布我的项目并且没有错误地访问它.

Max*_*sky 6

有一些可能导致错误的事情:


MVC库问题

生产服务器可能没有存储在GAC中的MVC库.为了解决这个问题,所有你所要做的就是进入你的MVC项目的References窗格/文件夹,找到System.Web.Mvc,System.Web.RoutingSystem.Web.Abstractions.现在,通过Ctrl单击它们来选择它们,并在"属性"窗口中将"复制本地"设置为true.

在发布到服务器之前很难知道是否是这种情况,所以我建议只是将程序集设置为一直复制本地.


登陆页面

您的目标网页可能存在问题.根据我对ASP.NET MVC的经验,我发现IIS需要一个登陆页才能正常运行.我正在使用ASP.NET MVC 2模板中包含的页面.您应该将我的产品与您的产品进行比较,看看您是否拥有所需的一切:

Default.aspx的:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="YourNamespace._Default" %>

<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%>
Run Code Online (Sandbox Code Playgroud)

Default.aspx.cs:

using System.Web;
using System.Web.Mvc;
using System.Web.UI;

namespace YourNamespace
{
    public partial class _Default : Page
    {
        public void Page_Load(object sender, System.EventArgs e)
        {
            // Change the current path so that the Routing handler can correctly interpret
            // the request, then restore the original path so that the OutputCache module
            // can correctly process the response (if caching is enabled).

            string originalPath = Request.Path;
            HttpContext.Current.RewritePath(Request.ApplicationPath, false);
            IHttpHandler httpHandler = new MvcHttpHandler();
            httpHandler.ProcessRequest(HttpContext.Current);
            HttpContext.Current.RewritePath(originalPath, false);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

权限

根据您获得的第一个HTTP状态代码,可能存在权限问题.必须将包含MVC应用程序文件夹定义为应用程序并设置为适当的权限.

通过IIS完成这两件事很容易.但是,您可能无法访问IIS; 如果你这样做,你很幸运!

否则,您可以使用该chmod命令通过FTP更改权限.您可以通过Filezilla连接,这是一个非常好的开源FTP客户端,只需通过右键单击+对话框即可.

至于将文件夹定义为应用程序,您应该检查是否可以通过主机提供给您的任何IIS内容来执行此操作.如果没有,请联系他们并要求他们进行设置.


祝好运!希望我帮忙.

  • 圣洁......你是一个字面上的天才.我已经尝试了你建议的第一步,reagrdig引用.你的第二个建议是神奇的.我不能向你表达我此刻的宽慰.现在,我将深入挖掘并了解问题所在以及解决方案的帮助.再次感谢! (2认同)