.NET MVC:如何在辅助方法中重定向响应
我有一些代码,这些代码对于我的一些控制器操作是常见的,这些操作被引入私有“帮助器”方法,仅用于整合。该方法应该为我“获取”一个对象,尽管它执行一些健全/安全检查,并可能将用户重定向到其他操作。
private Thingy GetThingy(int id)
{
var thingy = some_call_to_service_layer(id);
if( null == thingy )
Response.Redirect( anotherActionUrl );
// ... many more checks, all more complex than a null check
return thingy;
}
public ActionResult ActionOne(int id)
{
var thingy = GetThingy(id);
// do more stuff
return View();
}
// ... n more actions
public ActionResult ActionM(int id)
{
var thingy = GetThingy(id);
// do more stuff
return View();
}
这个功能正常,但Elmah会通知我一个异常:
System.Web.HttpException: Cannot redirect after HTTP headers have been sent.
所以,我的问题是:有没有更正确的方法来做我想做的事情?基本上,我想要的是使当前操作停止处理,而是返回RedirectToRouteResult。
没有找到相关结果
已邀请:
5 个回复
赣借
对象或一个
对象。在你的行动中
在你的情况下,你想要返回一个
对象,你需要分离出逻辑。您可以执行以下操作(我假设您要重定向到不同的操作,否则Oenning的代码将起作用)
更新您可以将此代码放在扩展方法或基本Controller类中
驮帽俺篮号
然后,定义您的异常过滤器:
全局注册新的异常过滤器,以便它适用于所有控制器操作(如果这是您想要的):
现在,无论您想要重定向,只需抛出RedirectException:
当然,您需要确保不要在try / catch中调用
,或者如果您这样做,请确保重新抛出异常。
缮淳彼誊
希望能帮助到你。
温拎凯玛
顺便说一句,恕我直言,
方法应放在其他地方。也许和ѭ16在同一个地方。
社攻取墟槽
很好地工作,并允许我将代码保持在我想要的位置。很甜蜜。