Mar*_*own 26 asp.net iis-7 custom-error-handling
我正在尝试为我的Web应用程序设置自定义404错误页面.问题是该应用程序将部署到许多不同的环境中.有时它会在虚拟目录中,有时它不会.
我在名为ErrorPages的目录中有错误页面,并设置了我的配置,如下所示:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404"/>
<error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
问题是当我将其部署到网站的根目录时,/VirtualDir
需要删除该部分.如果我在部署之前删除它,那么我需要在部署到虚拟目录时重新添加它.有什么办法可以设置相对于虚拟目录而不是网站的路径?
我尝试过使用a ~
,但这也不起作用,如下所示:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404"/>
<error statusCode="404" path="~/ErrorPages/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
您可以使用web.config转换来设置每个环境的路径:
网络配置
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404"/>
<error statusCode="404" path="/VirtualDir/ErrorPages/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
web.Release.config
<httpErrors>
<error statusCode="404" path="/ErrorPages/404.aspx" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,因此我使用服务器端代码使用动态生成的 URL(带或不带虚拟目录)重定向到 CustomError 页面,尽管 ~/ 成功从此处重定向到正确的路径。
当应用程序中发生错误时,将触发 Application_Error 并最终触发此代码块:
if (App.Configuration.DebugMode == DebugModes.ApplicationErrorMessage)
{
string stockMessage = App.Configuration.ApplicationErrorMessage;
// Handle some stock errors that may require special error pages
HttpException httpException = serverException as HttpException;
if (httpException != null)
{
int HttpCode = httpException.GetHttpCode();
Server.ClearError();
if (HttpCode == 404) // Page Not Found
{
Response.StatusCode = 404;
Response.Redirect("~/ErrorPage.aspx"); // ~ works fine no matter site is in Virtual Directory or Web Site
return;
}
}
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = 404;
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个应用程序设置并在那里保存路径,而不是在 web.config 的 httpErrors 部分中写入页面路径。在后面的代码中,您可以从应用程序设置中获取路径并重定向,如上所述。
我发现了另一个类似的链接,他比我解释得更好,所以只需浏览它 http://labs.episerver.com/en/Blogs/Ted-Nyberg/Dates/112276/2/Programmatically-configure-customErrors-redirects/
归档时间: |
|
查看次数: |
7746 次 |
最近记录: |