Asp.net mvc RedirectToAction返回类型错误

Asp.net mvc RedirectToAction返回类型错误,asp.net-mvc,Asp.net Mvc,我正在用MVC4开发一个web应用程序。 我需要有一个自定义的错误页面。 我想从许多函数的try-catch块重定向到错误页面 我想使用RedirectToAction来执行此操作 问题在于返回类型。我的函数使用不同的返回类型。 一个例子 private UserDetails getUserInfo(string userId) { UserDetails _userDetails = new UserDetails(); try {

我正在用MVC4开发一个web应用程序。 我需要有一个自定义的错误页面。 我想从许多函数的try-catch块重定向到错误页面

我想使用RedirectToAction来执行此操作

问题在于返回类型。我的函数使用不同的返回类型。 一个例子

private UserDetails getUserInfo(string userId)  
{
    UserDetails _userDetails = new UserDetails();
    try
    {            
        //Do something
    }
    catch (Exception ex)
    {                
        return RedirectToAction("customErrorPage", "CreateKit", errorObj); 
    }
    return _userDetails;
}
上面的函数应该返回一个UserDetails对象。因此,它在RedirectToAction行中显示错误。 我认为使用对象类型不是一个好的实践

如何解决这个问题

除了重定向操作,还有其他选择吗

注意:-RedirectToAction errorObj的参数对于所有函数都不相同。因此,如果我在函数外部处理RedirectToAction,那么我还需要获取errorObj值。 我知道我可以将其作为out参数传递。但就我而言,我必须通过3-4级考试。很多丑陋的代码

我非常喜欢这种方法的尝试命名约定:

private bool TryGetUserInfo(string userId, out userDetails)  
{
    bool result = false;
    UserDetails _userDetails = new UserDetails();
    try
    {            
        //Do something

        userDetails = _userDetails.GetDetails();
        result = true;
    }
    catch (Exception ex)
    {              
      Logger.LogError(ex);  
    }

    return result;
}


public ActionResult SomeMethod()
{
  UserDetails userDetails;

  if (TryGetUserInfo("asdf", out userDetails))
  {
    return View(userDetails);
  }
  else
  {
    return GetErrorResult();
  }
}

public ActionResult SomeOtherMethod()
{
  if (TryGetSomethingElse())
  {
    return View();
  }
  else
  {
    return GetErrorResult();
  }
}

// reusable error message for this controller
// could derive of all controllers and change it depending
// on the controller
private ActionResult GetErrorResult()
{
  return RedirectToAction("customErrorPage", "CreateKit", errorObj); 
}

决定使用自定义异常

为errorObj创建一个异常类 更新并将其从catch块中抛出 在父类中捕获它 重定向到带有errorObj的自定义错误页面。 我不确定这是一个好的做法,但它是有效的


感谢大家的支持和努力

您可以在类中添加一个属性作为标志,并在catch中设置它并返回它,这是您的操作吗?谢谢Erik的评论。但在我的例子中,errorObj的值对于所有函数都是唯一的。请检查我随问题添加的评论。修改我的GetErrorresult以传入errorObj真的有那么难吗?