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

时间:2010-07-03 17:49:21

标签: asp.net asp.net-mvc windows-server-2008 publish

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

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

所以,我联系了网络主机,并告诉我必须包含一个默认的登陆页面,例如Default.aspx,Index.aspx等。我怀疑这个响应是准确的,因为我认为MVC路由会采取关心这一点,但我按照建议做了,在Default.aspx.cs代码隐藏中添加了一个重定向到我的家庭控制器,但得到了一个HTTP错误404.我添加了每个建议的重定向,类似于本文中的建议:{{ 3}}

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

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

5 个答案:

答案 0 :(得分:6)

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


MVC库的问题

生产服务器可能没有存储在GAC中的MVC库。要解决此问题,您只需进入MVC项目的References窗格/文件夹并找到{ {1}},System.Web.MvcSystem.Web.Routing。现在,通过 Ctrl 单击它们来选择它们,并在Properties窗口中将Copy Local设置为true。

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


登陆页面

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

Default.aspx的:

System.Web.Abstractions

Default.aspx.cs:

<%@ 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. --%>

权限

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

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

否则,您可以使用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); } } } 命令通过FTP更改权限。您可以通过Filezilla连接,这是一个非常好的开源FTP客户端,只需通过右键单击+对话框即可。

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


祝你好运!希望我帮忙。

答案 1 :(得分:0)

可能是您的生产IIS没有为您的站点加载MVC参考文件。当我将一个MVC站点加载到一个说“我们完全支持MVC”的主机时,我遇到了同样的问题。您可以尝试使用“所有项目文件”选项进行发布。我相信这个问题也可以通过进入你的参考文件夹并选择mvc参考来解决。我现在不在我的开发人员机器上,但我相信你更改了某个属性以便将它们包含在已发布的文件中。

答案 2 :(得分:0)

试试pre-compiling your application。在visual studio中设置一个Deployment项目,然后在发布模式下部署它。

因为它是预编译的,所以您不依赖IIS来编译项目来运行它。这是我最近经常做的事情,因为如果我需要强制它重新编译或更新,生产服务器上的IIS会很痛苦。

答案 3 :(得分:0)

根据上面的评论和回复,我最后通过询问我的网络主机是否支持它来探索通配符应用程序映射。以下是我的回应:


我们的服务不支持通配符映射。

如果您想使用URL重写,这与重新路由相同,请使用下面的示例。

使用URL重写映射的示例,其中包含以下URL

/default.aspx?id=1将替换为/default.aspx?id=25

<rewrite>
<rewriteMaps>
<rewriteMap name="/default.aspx?id=1">
<add key="1" value="25" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Rewrite rule1 for /default.aspx?id=1">
<match url=".*" />
<conditions>
<add input="{/default.aspx?id=1:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
  1. 如果您要做的不是重写网址,而是网址重定向,请使用以下示例。
  2. 使用ASP创建文件“default.asp”重定向您的网站。

    将以下代码放入:

    <%
    Response.Status="301 Moved Permanently"
    Response.AddHeader "Location","http://www.new-url.com/"
    %>
    

    使用HTML重定向您的网站:

    <HTML><HEAD>
    <META HTTP-EQUIV=Pragma Content="No-Cache">
    <META HTTP-EQUIV=Refresh Content="5;URL=http://YOURURLWHEREYOUWANTTOREDIRECT">
    </HEAD>
    

    上面的任何东西都会起作用吗?说真的,这个MVC项目难以发布吗?我真的开始感到沮丧...... :(

    我应该只是寻找新的网络托管服务商吗?这会有所作为吗?

答案 4 :(得分:0)

发送以下请求: http://stackoverflow.com?variableValue=87

使用查询字符串中的变量值重定向页面 : -

Dim variableValue

variableValue = Request.QueryString(&#34; Occassion&#34;)

如果variableValue = 87则

Response.Status =&#34; 301永久移动&#34;

Response.AddHeader&#34; Location&#34;,&#34; http://www.google.com&#34;

结束如果