首页 新闻 搜索 专区 学院

asp.net mvc怎么实现前后台跳转不同的404页面

1
悬赏园豆:20 [已解决问题] 解决于 2014-02-23 14:01

后台代码放在Areas里面,前台放在~/controller下面 我想实现前后台跳转不同的404页面,我的实现方法:在前后台继承的BaseController里重写OnException   我测试了下在发送404的时候进不了这个方法

JerryChen89的主页 JerryChen89 | 初学一级 | 园豆:180
提问于:2014-01-16 22:40
< >
分享
最佳答案
1

我的解决办法在global中Application_EndRequest 具体办法我贴出来 仅供大家参考  

 1   protected void Application_EndRequest()
 2   {
 3         var statusCode = Context.Response.StatusCode;
 4         var routingData = Context.Request.RequestContext.RouteData;
 5         if (statusCode == 404 || statusCode == 500)
 6         {
 7            Response.Clear();
 8            var area = DataHelper.ConvertTo(routingData.DataTokens["area"], string.Empty);
 9            if (area == "Admin")
10            {
11                 Response.RedirectToRoute("Admin_Default", new { controller = "BackError", action = "NotFound", IsReload = 1 });
12            }
13            else
14            {
15                 Response.RedirectToRoute("Default", new { controller = "Error", action = "NotFound", id = UrlParameter.Optional });
16            }
17 
18        }
19 }
View Code
JerryChen89 | 初学一级 |园豆:180 | 2014-02-23 13:57
其他回答(4)
0

用ActionFilter,写两个不同的继承自HandleErrorAttribute的Filter。

收获园豆:6
Ninja_Lu | 园豆:289 (菜鸟二级) | 2014-01-16 22:53
0
    public class ErrorAttribute : ActionFilterAttribute, IExceptionFilter 
    {
        public void OnException(ExceptionContext filterContext)
        {
            //获取异常信息,入库保存 
            Exception Error = filterContext.Exception; 
            string Message = Error.Message;//错误信息 
            string Url = HttpContext.Current.Request.RawUrl;//错误发生地址 
            filterContext.ExceptionHandled = true;
            filterContext.Result = new RedirectResult("../Error/ErrorPage?ErrorMsg=" + Message);//跳转至错误提示页面 
        }
    }

然后在控制器或者Action上进行标注

    [Error]
    public class BaseController : Controller
    {

我是这样实现的。这是前台异常处理,

至于404你可以在配置文件中定义

<customErrors mode="On" defaultRedirect="Controllers/Action">
              <error statusCode="403" redirect="Controllers/Action" />
              <error statusCode="404" redirect="Controllers/Action" />
            </customErrors>
这里不是对应你想转到的页面而是你所想跳转的某个Controllers 中的某个Action
收获园豆:4
aehyok | 园豆:1012 (小虾三级) | 2014-01-17 10:07

这里能配置两个404页面吗 我异常是放在BaseController里面处理的

支持(0) 反对(0) JerryChen89 | 园豆:180 (初学一级) | 2014-01-17 11:26

@Jerry Long: 

你前后台难道还公用一个配置文件吗?

支持(0) 反对(0) aehyok | 园豆:1012 (小虾三级) | 2014-01-17 11:27

@aehyok:我前后台是放在一个项目里

支持(0) 反对(0) JerryChen89 | 园豆:180 (初学一级) | 2014-01-17 11:43
0

用过滤器可以实现。ActionFilter

收获园豆:4
贫民窟大侠 | 园豆:4270 (老鸟四级) | 2014-01-17 11:14
0

继承下HandleErrorAttribute 获取当前的area如果area是某个值跳转到一个地址 area是空说明是前台

收获园豆:6
向晚 | 园豆:79 (初学一级) | 2014-01-18 23:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册