我<error-page>在web.xml中使用元素来指定用户遇到某个错误时的友好错误页面,例如代码为404的错误:
<error-page>
<error-code>404</error-code>
<location>/Error404.html</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
但是,我希望如果用户不符合指定的任何错误代码<error-page>,他或她应该看到默认错误页面.如何使用web.xml中的元素执行此操作?
当有人键入不调用ASP.NET MVC中的有效操作或控制器的URL而不显示通用的"未找到资源"ASP.NET错误时,我试图创建自定义HTTP 404错误页面.
我不想使用web.config来处理这个问题.
是否有任何类型的路由魔法可以捕获任何无效的URL?
更新:我尝试了给出的答案,但我仍然得到丑陋的"资源未找到"消息.
另一个更新:好的,显然RC1中发生了一些变化.我甚至尝试过专门捕获404 HttpException,它仍然只是给了我"资源未找到"页面.
我甚至使用过MvcContrib的资源功能,没有 - 同样的问题.有任何想法吗?
asp.net asp.net-mvc custom-error-pages asp.net-mvc-routing http-status-code-404
我为我的应用程序设置了自定义错误页面:
<customErrors mode="On" defaultRedirect="~/errors/GeneralError.aspx"
/>
Run Code Online (Sandbox Code Playgroud)
在Global.asax,Application_Error()中,以下代码用于获取异常详细信息:
Exception ex = Server.GetLastError();
if (ex != null)
{
if (ex.GetBaseException() != null)
ex = ex.GetBaseException();
}
Run Code Online (Sandbox Code Playgroud)
当我到达我的错误页面(〜/ errors/GeneralError.aspx.cs)时,Server.GetLastError()为null
有没有什么办法可以在错误页面上获取异常详细信息,而不是在Global.asax.cs中?
Vista/IIS7上的ASP.NET 3.5
我如何[HandleError]在asp.net MVC Preview 5中进行过滤?
我在我的Web.config文件中设置了customErrors
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
并将[HandleError]放在我的Controller类上面,如下所示:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我让我的控制器从这个类继承并在它们上调用CrashTest().视觉工作室在错误时停止并按下f5继续后,我被重新路由到Error.aspx?aspxerrorpath =/sxi.mvc/CrashTest(其中sxi是所用控制器的名称.当然道路无法找到,我得到"'''应用程序中的服务器错误."404.
这个站点从预览3移植到5.除了错误处理之外,所有东西都运行(没有太多工作要移植).当我创建一个完整的新项目时,错误处理似乎有效.
想法?
- 注意 -
由于这个问题现在有超过3K的视图,我认为放入我目前使用的(ASP.NET MVC 1.0)是有益的.在mvc contrib项目中有一个名为"RescueAttribute"的出色属性你也应该检查一下;)
我有一个用Unicorn托管的Sinatra应用程序,在它前面有nginx.当Sinatra应用程序出错(返回500)时,我想提供一个静态页面,而不是默认的"内部服务器错误".我有以下nginx配置:
server {
listen 80 default;
server_name *.example.com;
root /home/deploy/www-frontend/current/public;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_pass http://127.0.0.1:4701/;
}
error_page 500 502 503 504 /50x.html;
}
Run Code Online (Sandbox Code Playgroud)
error_page指令在那里,我有sudo'd作为www-data(Ubuntu)并验证我可以cat文件,因此它不是权限问题.使用上面的配置文件,并且service nginx reload,我在错误时收到的页面仍然是"内部服务器错误".
我的错误是什么?
我正在使用JSF开发Web应用程序.我测试了它,因为我能够但不时抛出运行时异常.
那么,每次抛出异常时如何将用户重定向到特殊错误页面(而不是显示完整tomcat日志的500错误)?
所以我知道这看起来有点奇怪,但为了保持一致性,我希望我的所有网址都以这种形式出现:http://domain.com/page/到目前为止,我已经让常规页面正常工作,但我不能似乎让错误页面正常工作.
如果用户访问不存在的页面或目录,我希望浏览器硬重定向到:http://domain.com/404/但是,此目录实际上不存在.错误页面的真实位置将在/pages/errors/404.php下
此外,虽然我不需要所有各种错误(400,401,403,404,500)的确切答案,但我将应用任何方法将所有这些重定向到他们的"正确"URL(例如http) ://domain.com/400/ http://domain.com/500/等)
有任何想法吗?
我在ASP.NET MVC 5应用程序中使用自定义authorize属性,如下所示:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if (context.HttpContext.Request.IsAuthenticated)
{
context.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
}
else
{
base.HandleUnauthorizedRequest(context);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在system.web我的web.config部分,我提到了错误路径,如:
<system.web>
<customErrors mode="On" defaultRedirect="/Error/Error">
<error statusCode="403" redirect="/Error/NoPermissions"/>
</customErrors>
</system.web>
Run Code Online (Sandbox Code Playgroud)
但我从未被重定向到我的自定义错误页面/Error/NoPermissions.相反,浏览器显示"HTTP错误403.0 - 禁止"的常规错误页面.
在JSP中,您可以使用response.sendError(int code, String message)返回特定的错误代码(例如404找不到)和消息.只要您使用默认的丑陋Tomcat错误页面,这些消息就会显示正常.但是,如果您创建自定义错误页面,您如何获得该消息?我已经试过exception.getMessage()或pageContext.getErrorData()却无济于事.我一直在寻找这个好几个小时,似乎没有人想知道同样的事情!:S
我忘了提到我到目前为止只用404s尝试过,因为这是我最需要的...由于某种原因异常是null,所以在它上面尝试任何东西都会抛出NullPointerException.错误页面是一个404错误页面,通过web.xml设置(因为我希望它显示每个单个404错误)和任何想知道的人,是的,它将isErrorPage指令设置为true ...
我希望将所有401错误重定向到自定义错误页面.我最初在web.config中设置了以下条目.
<customErrors defaultRedirect="ErrorPage.aspx" mode="On">
<error statusCode="401" redirect="~/Views/Shared/AccessDenied.aspx" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
使用IIS Express时,我收到了IIS Express 401错误页面.
如果我不使用IIS Express,则返回空白页面.使用Google Chrome的"网络"标签检查响应,我看到当页面为空白时,标题中会返回401状态
到目前为止我尝试使用的是这个SO答案中的建议,因为我使用的是IIS Express,但无济于事.我尝试过使用组合<custom errors>而<httpErrors>没有运气 - 标准错误或空白页仍然显示.
该httpErrors部分看起来像这样的基础上,瞬间链接从上面的SO问题(我还发现了另一种非常有前途的答案却没有运气-空白响应)
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" >
<remove statusCode="401" />
<error statusCode="401" path="/Views/Shared/AccessDenied.htm" />
</httpErrors>
<!--
<httpErrors errorMode="Custom"
existingResponse="PassThrough"
defaultResponseMode="ExecuteURL">
<remove statusCode="401" />
<error statusCode="401" path="~/Views/Shared/AccessDenied.htm"
responseMode="File" />
</httpErrors>
-->
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
我甚至已经修改了applicationhost.config文件,并修改<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">,以<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated">基于从信息iis.net.在我努力的过程中,我也设法偶然发现了另一个SO问题中描述的这个错误.
如何在Asp.Net Mvc …
error-handling http-error custom-error-pages iis-express asp.net-mvc-3
asp.net-mvc ×3
jsp ×3
asp.net ×2
.htaccess ×1
exception ×1
facelets ×1
handleerror ×1
http-error ×1
iis-express ×1
java ×1
jsf ×1
nginx ×1
redirect ×1
rewrite ×1
servlets ×1
tomcat ×1
web.xml ×1