只要我使用MVC框架进行重定向,我就一直在使用:
return this.RedirectToAction("ActionName");
但是最近我“发现”我可以像这样直接从其他动作中调用动作:
return this.ActionMethod();
我认为。调用动作要比重定向到动作好得多,因为它更具可读性(至少对我而言),并且可以使用参数传递复杂的对象,而无需使用Viewbag或类似的数据容器。
理论上,如果我在调用之前创建其控制器的新实例,则也可以调用其他控制器的动作。
我还没有看到有人以这种方式重定向,这就是我要问的原因。
这是出于某种原因的非常错误的方法还是以这种方式重定向是否安全?
编辑
让我们拥有
public class Controller
{
public ActionResult Action1()
{
if()
{
return this.RedirectToAction("Action2");
}
else
{
return this.Action2();
}
}
public ActionResult Action2()
{
return this.view()
}
}
据我了解,If / Else中的两个代码都将返回相同的html代码,还是我错了?
答案 0 :(得分:3)
您的代码的主要区别是return this.RedirectToAction("Action2");
返回HTTP 302,并且没有HTML 。 302告诉浏览器重定向到“ Action2”。然后,浏览器将调用Action2网址,然后获取该网址的HTML。
所以从浏览器的角度来看:
call action1 url -> server returns HTTP 302 -> call action2 url -> get action2 HTML
return this.Action2();
仅从Action2返回HTML。在浏览器的网址中显示为Action1。
所以从浏览器的角度来看:
call action1 url -> get action2 HTML