Asp.net mvc 重定向到操作或直接操作调用

Asp.net mvc 重定向到操作或直接操作调用,asp.net-mvc,Asp.net Mvc,只要我使用MVC框架进行重定向,我就一直在使用: return this.RedirectToAction("ActionName"); 然而,我最近“发现”我可以直接从其他动作调用动作,如下所示: return this.ActionMethod(); 依我看。调用action比重定向到action要好得多,因为它更易于读取(至少对我来说是这样),并且可以通过参数传递复杂对象,而无需使用Viewbag或类似的数据容器 理论上,如果我在调用之前创建其控制器的新实例,也可以调用来自其他控制

只要我使用MVC框架进行重定向,我就一直在使用:

 return this.RedirectToAction("ActionName");
然而,我最近“发现”我可以直接从其他动作调用动作,如下所示:

 return this.ActionMethod();
依我看。调用action比重定向到action要好得多,因为它更易于读取(至少对我来说是这样),并且可以通过参数传递复杂对象,而无需使用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代码,还是我错了?

您的代码的主要区别在于
返回这个。重定向到操作(“操作2”)返回并且没有HTML。302命令浏览器重新指向“Action2”。浏览器将调用Action2 url,然后获取相应的HTML

因此,从浏览器的角度来看:

call action1 url -> server returns HTTP 302 -> call action2 url -> get action2 HTML
call action1 url ->  get action2 HTML

返回这个.Action2()仅从Action2返回HTML。它在浏览器的url中显示为Action1

因此,从浏览器的角度来看:

call action1 url -> server returns HTTP 302 -> call action2 url -> get action2 HTML
call action1 url ->  get action2 HTML

this.ActionMethod()不是一个直接的代码。你只需要调用一个方法。所以他们做了不同的事情。安全吗,是的,你只需要调用一个方法。但这些将向浏览器返回不同的HTTP代码。我用更多的想法修改了问题。直接操作方法调用不会像
RedirectToAction
通常那样将HTTP状态代码302响应设置为浏览器,并且不会触发重定向。通过返回操作方法名称,它将返回标准HTTP状态代码200(成功的方法调用)。@Liam Ah,感谢您的澄清!我现在明白了。我以为是服务器在操作之间重定向,直到生成html代码并发送到浏览器。我的错。那么,采取行动有什么意义呢?似乎它有更多的步骤来实现与直接调用action方法相同的事情。这是一个re-direct。这是一件很平常的事。例如,您可能有一个登录操作,登录后会重定向到内部url或未经验证的url。如果你退出页面,但又不想失去谷歌排名,这是很有用的。好处是,新的内容是在一个新的URL上提供的。这可能是有益的搜索引擎排名,但还有其他事情要考虑。如果此URL根据调用时间(例如)返回不同的内容,如果接收此URL的用户希望将此内容添加到书签,该怎么办。这是一个不同的事情,做的事情也不同,所以选择哪一个取决于你想要的结果。两者都不是“更好”的