Asp.net mvc RedirectToAction返回类型错误
我正在用MVC4开发一个web应用程序。 我需要有一个自定义的错误页面。 我想从许多函数的try-catch块重定向到错误页面 我想使用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 {
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真的有那么难吗?