处理我的asp.net mvc应用程序中的错误

时间:2016-04-26 12:04:24

标签: c# asp.net

我现在已经阅读了很多关于如何处理asp.net错误的文章,我认为它有很多信息可供参与。

我正在使用服务层模式,在我的服务模型中,我有以下代码:

   public List<SpotifyAlbumModel> AddSpotifyAlbums(List<SpotifyAlbumModel> albums)
    {
        try
        {
            if(albums != null)
            {
                ctx.SpotifyAlbums.AddRange(albums);
                ctx.SaveChanges();
            }

            return albums;
        }
        catch(Exception e)
        {
            throw new Exception();
        }    
    }

如果问题出现,我想将用户重定向到错误页面,说明出错了。

我从我的控制器调用我的服务方法:

 public ActionResult AddSpotifyAlbums(List<SpotifyAlbumModel> albums)
    {
        _profileService.AddSpotifyAlbums(albums);
        return Json(new { data = albums });
    }

如何在我的控制器方法中确定是否出现问题在服务中,然后将用户重定向到错误页面?

或者我应该有一个全局的errorHandler,一旦捕获了一个例外,就会转移用户吗?

2 个答案:

答案 0 :(得分:1)

您可以在 global.asax 中添加 Application_Error 方法。例如:

void Application_Error(Object sender, EventArgs e)
{
    var exception = Server.GetLastError();
    if (exception == null) {        
        return;
    }

    // Handle an exception here...

    // Redirect to an error page
    Response.Redirect("Error");
}

答案 1 :(得分:0)

我们尝试过多种方法,但似乎最有效的方法就是自己处理每一个异常。我们自己并没有完全发明这个,灵感来自这里:
ASP.NET MVC 404 Error Handling

    protected void Application_EndRequest()
    {            
        if (Context.Response.StatusCode == 404)
        {
            Log.Debug("Application_EndRequest:" + Context.Response.StatusCode + "; Url=" + Context.Request.Url);

            Response.Clear();

            string language = LanguageUtil.Instance.MapLanguageCodeToWebsiteUrlLanguage(HttpContext.Current.Request, Thread.CurrentThread.CurrentUICulture.Name);

            var rd = new RouteData();
            //rd.DataTokens["area"] = "AreaName"; // In case controller is in another area
            rd.Values["languageCode"] = language;
            rd.Values["controller"] = "Error404";
            rd.Values["action"] = "Index";

            Response.TrySkipIisCustomErrors = true;

            IController c = new Controllers.Error404Controller();
            c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
        }
        else if (Context.Response.StatusCode == 500)   
        {
            Log.Debug("Application_EndRequest:" + Context.Response.StatusCode + "; Url=" + Context.Request.Url);

            Response.Clear();

            string language = LanguageUtil.Instance.MapLanguageCodeToWebsiteUrlLanguage(HttpContext.Current.Request, Thread.CurrentThread.CurrentUICulture.Name);

            Response.Redirect("~/" + language + "/error");
        }
    }