这是我在这里发表的第一篇文章,我在这里和网上的许多其他论坛都搜索了这个问题的解决方案,但没有成功。
我正在尝试为目录访问被拒绝错误403.14创建自定义错误,以防有人试图在网站上加载“_assests”目录。我知道我可以通过在我希望发生这种情况的每个目录中添加一个default.aspx页面来解决这个问题,但是想知道是否有类似于web.config文件中的标记的站点范围解决方案
<configuration>
<system.web>
<customErrors defaultRedirect="/Errors/GenericError.aspx" mode="RemoteOnly">
<error statusCode="401"
redirect="/Errors/401.aspx"/>
<error statusCode="403"
redirect="/Errors/403.aspx"/>
<error statusCode="404"
redirect="/Errors/404.aspx"/>
<!--
<error statusCode="403.14"
redirect="/"/>
-->
</customErrors>
</system.web>
</configuration>
我在编写web.config时遇到错误,我无法使用带有小数的statusCode,因为它不是数据类型Int
我在Server 2008上有一个IIS 7.
有什么想法吗?
答案 0 :(得分:2)
在web.config
中添加了以下内容,到目前为止似乎有效。不知道原因,但如果我没有明确告诉 403 错误重定向到自定义403.aspx
页面,而不是GenericError.aspx
页面,我会得到 500 错误。但是,如果我将 404 错误重定向到我的自定义404.aspx
页面,则GenericError.aspx
代码会写入到位,而不是预期的,并且您似乎永远不会重定向到实际404.aspx
页面(请参阅web.config
的评论部分)。奇异。
<强> CODE:强>
web.config文件:
<system.webServer>
<httpErrors existingResponse="Replace" errorMode="Custom">
<remove statusCode="403"/>
<remove statusCode="404"/>
<error statusCode="403" path="/Errors/403.aspx" responseMode="Redirect" />
<!-- <error statusCode="403" path="/Errors/GenericError.aspx" responseMode="Redirect" /> -->
<!-- <error statusCode="404" path="/Errors/GenericError.aspx" responseMode="Redirect" /> -->
<error statusCode="404" path="/Errors/404.aspx" responseMode="Redirect" />
</httpErrors>
</system.webServer>
GenericError.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
var ex = HttpContext.Current.Server.GetLastError();
if (ex is HttpException)
{
var nex = ex as HttpException;
//Label in the Main code displays the Error Code from the Error String
this.customErrorMessageCode.Text += "Error Code" + " " + nex.GetHttpCode().ToString();
//Label in the Main code displays the Error Message from the Error String
this.customErrorMessageLabel.Text += ex.Message.ToString();
//DIV ID in the Main code displays the entire error message
this.customErrorMessage.Visible = true;
switch (nex.GetHttpCode())
{
case 404:
this.customErrorMessageCode.Text += " Page Not Found";
this.customErrorMessageImage.Visible = true;
// do somehting cool
break;
case 403:
this.customErrorMessageCode.Text += " Forbidden Access";
this.customErrorMessageImage.Visible = true;
// do somehting cool
break;
case 500:
this.customErrorMessageCode.Text += " Internal Error";
this.customErrorMessageImage.Visible = true;
// do somehting cool
break;
default:
break;
}
}
else {
this.customErrorMessageLabel.Text += ex.Message + ex.GetType().ToString();
}
}
<强>来源:强>
答案 1 :(得分:1)
也许您可以使用基于使用Server.GetLastError()
的实际错误代码的重定向方法。
在Global.asax
中,您将拥有以下内容:
protected void Application_Error(object sender, EventArgs e)
{
if (Context.IsCustomErrorEnabled) {
ShowCustomErrorPage(Server.GetLastError());
}
}
然后 ShowCustomErrorPage
会有一个switch语句,它会读取HTTP代码并重定向到正确的错误页面。
更多来自源链接,但它可能过于MVC特定。正如你没有提到你使用MVC,我不想假设并盲目地复制粘贴。
我对MVC并不太熟悉,但这里的原则看起来可以根据您的情况进行调整。
找到了一些可能有用的StackOverflow帖子:
Custom Error Handling in web.config / Global.asax not handling non-existant directory