我正在尝试为ASP.NET 4.5.2 Web窗体项目设置500和404页。当不存在的页面是.ASPX页面时,我可以使用404。 -我编写了用于提供自定义NotFound.aspx页面作为响应的代码。
当我使用Web.config为不存在的HTML页面提供404.html页面时,会发生我的问题。我的404.html页面在根文件夹中。如果我使用根文件夹中不存在的HTML页面进行测试,则404.html可以正确呈现。但是,如果我在不存在的子文件夹中使用不存在的HTML页面对其进行测试,则会提供404.html,但是CSS / JS路径不再正确吗?就像将CSS / JS路径视为与我在测试中指定的不存在的子文件夹相关?
Global.asax.cs:
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex != null && ex is HttpUnhandledException)
{
Server.ClearError();
Server.Transfer("~/Error.aspx", true);
}
if (ex != null)
{
var httpException = ex as HttpException;
if (httpException.GetHttpCode() == 404)
{
Server.ClearError();
Server.Transfer("~/NotFound.aspx", true);
}
}
}
Web.config:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" path="404.html" responseMode="File" />
</httpErrors>
答案 0 :(得分:0)
为CSS / JS路径使用绝对URL。例如,在您的404.html
中(bootstrap和jquery只是示例):
<link href="/Content/bootstrap.min.css" rel="stylesheet" />
<script src="/Scripts/jquery-3.0.0.min.js"></script>
<script src="/Scripts/bootstrap.min.js"></script>
另一种设置是设置responseMode="Redirect"
:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" path="/Errors/404.html" responseMode="Redirect" />
</httpErrors>
在此示例中,404.html
位于文件夹Errors
中,并且URL可以是相对的:
<link href="../Content/bootstrap.min.css" rel="stylesheet" />
<script src="../Scripts/jquery-3.0.0.min.js"></script>
<script src="../Scripts/bootstrap.min.js"></script>
这将起作用,因为重定向URL不再相对于您所请求的URL。
答案 1 :(得分:0)
我能够如下解决它:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" path="http://localhost/myproject/404.html"
responseMode="File" />
</httpErrors>
关键要点是该版本必须能够使用绝对路径。因此,我的下一步是尝试以编程方式设置路径,以便在调试模式下将其转到本地,在发布模式下将其转到生产URL。我不想弄乱Web.config转换文件。
如果有人有进一步的信息,请放心。