我目前正在生产服务器上部署使用MVC ASP.NET的RC构建的应用程序,现在什么都没有显示。 我的global.ascx中的路由是典型的,即
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
任何人都可以弄明白为什么它只显示空白页
抱歉,我忘了提到它是IIS 6
有趣的是它也在我的本地IIS上工作(即本地内置的VS&标准版XP)
答案 0 :(得分:19)
如果在global.asax中设置了错误处理设置,并且泛型错误(如无法找到的程序集),您还会得到一个空白页。
在global.asax中禁用它时,您可以看到服务器错误。 修复这些初始错误后,别忘了再次启用它。
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "ErrorController");
routeData.Values.Add("action", "HandleTheError");
routeData.Values.Add("error", exception);
Response.Clear();
Server.ClearError();
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}
答案 1 :(得分:3)
当特定地方出现错误时会显示空白页面 - 在我的例子中,它是一个MethodNotFoundException ......
要查看错误,请确保在“Web服务器(IIS)角色中启用”HTTP错误“和”HTTP重定向“服务。
答案 2 :(得分:2)
通常当我得到它时,这是因为我在IIS7(或Visual Studio附带的IIS Express 7)上进行开发后,在部署到IIS6时忘记将以下内容添加到Web.config中:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
答案 3 :(得分:1)
我解决了这个问题,主要问题是MVC框架的不同版本。我安装MVC RC1时,Production Server正在使用MVC Beta。因此,只要我在服务器上安装RC1并运行mvc扩展注册脚本,一切正常,感谢您的帮助
答案 4 :(得分:0)
服务器环境是什么?如果它不是IIS7 / Server 2008,那么你需要进行其他调整才能使路由正常工作,尽管如果是这种情况你可能会得到一个错误页面,而不是空白页面。
答案 5 :(得分:0)
如果是生产服务器出现问题,则可能是角色权限。您需要确保应用程序正在使用的所有文件夹和文件允许读取(在某些情况下,如果使用日志,则写入)IIS正在使用的角色标识。
IIS通常使用的身份是在网站属性中 - &gt;目录安全 - &gt;编辑(身份验证和访问控制)。如果您不想允许网络上的任何计算机访问该网站,那么您应该关闭“启用匿名访问”。如果您确实想要允许此操作,那么这将是您在webapp文件夹和文件中访问所需的标识。否则,您可能需要授予对包含您要访问的用户身份的角色的访问权限。
答案 6 :(得分:0)
从它的外观来看,如果你想要一个像/Home.aspx这样的网址,我会期望第一条路由可行,但如果你只是去/ url,那么ASP.net不知道如何处理URL。它将尝试匹配IIS默认页面,如index.html,default.aspx,index.aspx等。如果没有找到任何内容,则请求无法到达任何地方。尝试创建default.aspx(或路由中的任何其他索引文件),然后在page_load中执行response.redirect("~/Home.aspx")
。
如果这不起作用,我会查看此source。 IIS 6和MVC不能很好用的一个主要原因是IIS 6默认情况下没有将通配符*映射到ASP.net DLL。
我确信这是一种配置产品服务器的方式,您可以在XP实例和生产之间进行任何比较吗?
答案 7 :(得分:0)
您是否在生产服务器上的web.config中定义了HTTP处理程序和模块?
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
<add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
在IIS6上,URL必须包含.mvc(例如/Products.mvc/ListAll)。请查看这些指南以了解正确的IIS 6配置和.mvc扩展解决方法:
答案 8 :(得分:0)
这意味着您在MVC应用程序中抛出了异常,但您可能在MVC中有一个捕获,过滤和隐藏这些异常的类。这些例外仍然被抛出,但你不能看到导致它们的原因。 MVC仍然重新路由页面请求,但由于隐藏的异常而没有返回任何内容。在看到抛出异常之前,您无法阻止此问题。在关闭MVC的异常处理过滤器之前,您无法在网页中看到异常。
可能阻止您看到异常的一件事是在网站首次加载时通过global.asax中的MVC过滤器调用的GlobalFilterCollection。您通常可以在Global.asax文件中找到这些调用。该文件通常在网站首次加载及其事件时调用HttpApplication对象。在其事件中,它然后加载到开发人员添加的默认MVC路由中,但也可以加载处理站点范围异常处理的过滤器。开发人员经常通过global.asax中的过滤器来处理异常处理,认为他们智能地处理用户的异常和问题,但这是一个错误。如果您在其中找到过滤器,请将其注释掉。突然之后,您的所有错误都会再次显示在HTML页面中。
然后您可以解决问题!祝你好运!
答案 9 :(得分:0)
在以下情况下也发生了这种情况:
1)我在浏览器接受时添加了一个CompressAttribute来添加Gzip。
response.AppendHeader("Content-Encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
2)我正在修改输出HTML以更改显示的电话号码:
response.Filter = new OutputHtmlReplacer(response.Filter, phoneNumber);
其中OutputHtmlReplacer是一个继承自MemoryStream的类
所以,解决方案是:
1)验证标题并检查我们是否正在应用压缩。
2)如果是这样,那么新的OutputHtmlReplacer响应过滤器必须由GzipStream包装。
答案 10 :(得分:0)
贾斯汀(Justin)有人遇到与我相同的问题,请尝试监视:
protected void Application_Error(object sender, EventArgs e) {
对我来说,应用程序无声地失败了,我不知道,所以很显然它返回了一个空白,但是令人困惑的部分是返回了200作为http响应状态代码。
无论如何,我希望这对以后的人有所帮助。
答案 11 :(得分:0)
如果在应用程序中创建app_offline.htm
文件,请尝试将其删除。
答案 12 :(得分:0)
作为另一种可能的解决方案:
我没有部署一个月左右,但是我通过一些次要版本更新了Visual Studio。 VS Base和我的某些Nuget软件包之间存在不兼容的情况。更新了我的软件包,确保清除(并删除bin / obj-即使它最初不能解决问题),然后重新部署。此后工作。