RedirectToAction или вызов прямого действия - PullRequest
0 голосов
/ 17 сентября 2018

Пока я использую MVC Framework для перенаправления, я использую:

 return this.RedirectToAction("ActionName");

Однако недавно я «обнаружил», что могу вызывать Action из другого Action напрямую, например:

 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-код, или я ошибаюсь?

1 Ответ

0 голосов
/ 17 сентября 2018

Основное различие в вашем коде состоит в том, что return this.RedirectToAction("Action2"); возвращает HTTP 302 и без HTML . 302 говорит браузеру перенаправить на «Action2». браузер затем вызовет URL-адрес Action2 и получит для этого HTML-код.

Итак, с точки зрения браузеров:

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

return this.Action2(); просто возвращает HTML из Action2. Похоже, что Action1 в URL браузера.

Итак, с точки зрения браузеров:

call action1 url ->  get action2 HTML
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...