我正在开发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以外还有其他选项吗?
注意: - RedirectToAction“errorObj”的参数对于所有函数都不相同。因此,如果我在函数外部处理RedirectToAction,那么我还需要获取errorObj值。 我知道我可以将它作为out参数传递。但就我而言,我必须将其传递到3-4级。很多丑陋的代码。
答案 0 :(得分:0)
我是这个方法的 try 命名约定的粉丝:
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);
}
答案 1 :(得分:0)
决定使用自定义异常。
不确定这是一个好习惯,但它确实有效。
感谢大家的支持和努力。