Wątek przeniesiony 2018-05-03 14:03 z C# i .NET przez somekind.

ViewBag.ReturnUrl czy asp same wypełnia wartość dla tego pola?

0

W widoku logowania z wykorzystaniem asp.net identity jest taka linijka kodu:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))

Skąd pobierana jest wartość ViewBag.ReturnUrl? Jeśli wcześniej nigdzie nie jest tworzony ViewBag z takim property i nie jest nadawana mu żadna wartość? Czy asp.net identity robi to samo?

0

Nikt nie wie?

0

Ja wiem tyle, że raczej musi być gdzieś przypisane i niekoniecznie w kontrolerzy.

0

Mimo, że nigdzie nie wpisuje żadnej wartości w te property to i tak potem działą wsyzstko ok i zastanawiam sie czy to asp w jakiś automatyczny sposób sam wpisuję taką wartość.

0

Nie szybciej byłoby wyszukać "ViewBag.ReturnUrl" w całym projekcie i samemu poszukać?

0

No właśnie tam ta wartość jakoś automatycznie jest wpisywana

0

To Twój projekt? Utworzony od zera?
Może w jakimś filtrze akcji?

0

Mam coś takiego w metodzie:

public ActionResult Login(string returnUrl)
        {
            ViewBag.ReturnUrl = returnUrl;
            return View();
        }

i takie coś w widoku:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form}" }))

I W sumie nigdzie nie jest nadawana wartość dla ViewBag.ReturnUrl. Tylko pobierana jest z ViewBag.ReturnUrl, gdzie nigdzie nie jest wpisywana żadna wartość dla tego ViewBag.ReturnUrl.

0

Niby w tej metodzie w kontrolerze do ViewBag.ReturnUrl wpisujemy coś, ale znowu to co przekazujemy w parametrze to jest wysyłane w widoku:
new { ReturnUrl = ViewBag.ReturnUrl } i w sumie nie ogarniam skąd tam bierze się jakaś wartość w tym ViewBag.ReturnUrl w widoku.

1

O masz.
No jak przypiszesz coś do VieBag-a w kontrolerze to masz to dostępne w widoku. Po to jest ViewBag.

0

No tak tylko w kontrolerze przepisuje to tak:

ViewBag.ReturnUrl = returnUrl;

A mi chodzi skąd tam bierze się ta wartość returnUrl? Jak w widoku mam:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form}" }))

Czyli do metody jest przekazywane tutaj ReturnUrl co przyjmuje wartość ViewBag.ReturnUrl. Tylko skąd ten widok bierze wartość ViewBag.ReturnUrl jak w widoku go nigdzie nie definiuje?

0

Nie rozumiem chyba. Wartość returnurl bierze się z adresu przeglądarki. Metoda login ma parametr string returnurl i jak wpiszesz taki parametr w adresie przegladarki to zostanie on przekazany do metody login.
Ścislej to określa to routing aplikacji (chyba, bo ja się nie znam na asp.net).

Potem ustawiasz Vieebag.ReyurnUrl na wartość z przekazanego parametru A cały ten ViewBag jest przekazywany (udostepniany) do widoku. To co wpiszesz do Vieebag w kontrolerzy to tam jest i jest dostępne w widoku.
To taka torba na śmieci. Wrzucasz śmieci w domu, wynosisz i są dostępne w tej torbie na śmietniku.
ViewBag jest typem dynamicznym więc możesz tam wrzucić cokolwiek.

Przerób jakiś kompleksowy poradnik albo książkę.

0

Nadal nie odpowiedziałeś na moje pytanie. DObra nie ważne, bo patrze, że mniej wiesz ode mnie.

1

To jest parametr pobierany z żądania, następnie przekazywany do metody przez binder w MVC. Domyślnie jak wejdziesz na adres Login?returnUrl=blabla, to zostanie wyciągnięte "blabla" z query stringa i przekazane dalej.
Teraz jest pytanie, kto wypełni query stringa. A to zazwyczaj załatwia filtr sprawdzający użytkownika, coś, co bierzesz z frameworka. Jak wrzucisz [Authorize] na kontroler lub metodę, to filtr sprawdzający zalogowanie to wyłapie, sprawdzi dane użytkownika, w przypadku niezalogowanego ich nie znajdzie, więc przekieruje na Login i ustawi returnUrl tak, żeby po zalogowaniu się użytkownik poszedł tam, gdzie chciał (do jakiejś podstrony), a nie na stronę główną. Adres podstrony weźmie znowu z żądania, więc efektywnie na samym końcu returnUrl jest podawany niejawnie i nieświadomie przez użytkownika.
A jak używasz innego mechanizmu autentykacji i autoryzacji, to rozkmiń sam, albo podaj więcej kodu.

0

Ja się poddaje :)

0

Afish dzięki to rozjaśniło mi już sytuację. Miałem przed kontrolerem dodaną adnotację Authorize i to ona nadawała wartość dla returnurl.

1 użytkowników online, w tym zalogowanych: 0, gości: 1