-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNotatki z ASP Core.txt
58 lines (38 loc) · 2.5 KB
/
Notatki z ASP Core.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Przesyłanie danych z HTMLa do backendu:
- musimy mieć element z atrybutem name, wówczas wartość tego atrybutu zostanie zmapowana na parametr akcji (metody kontrolera) o tej samej nazwie.
- atrybut Bind pozwala na zmapowanie wartości z name na pola klasy, jeśli mamy parametr tej klasy.
URUCHAMIANIE APLIKACJI PRZY POMOCY CTRL+F5
Wówczas wszelkie zmiany w kodzie są od razu widoczne w aplikacji (przeglądarce). Niekiedy to wywołuje Build projektu.
=== SESJE HTTP
Używanie sesji w aplikacjach webowych pozwala na wprowadzanie stanów za pomocą
obiketu HttpContext.Session. Domyslnie w ASP nie używa się sesji, jednak za pomocą
metody
services.AddSession(); // w metodzie ConfigureServices
app.UseSession(); // w metodzie Configure
włączamy tę funkcjonalność w pliku Startup.cs.
=== PRZEKAZYWANIE HttpContext do innych serwisów
Jeśli w innych klasach aplikacji musimy mieć dostęp do kontekstu HTTP, to robi się to następująco:
- w metodzie Startup.ConfigureServices używamy:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
To powoduje, że do konstruktorów serwisów (takich jak IUserIdProvider) przekazywany jest obiekt HttpContextAccessor. Wówczas zmieniamy konstruktor serwisu (np. IUserIdProvider) na
public UserIdProvider(HttpContextAccessor httpContextAccessor) {//zapisujemy sobie do zmiennej globalnej}
MIDDLEWARE
W metodzie Configure klasy Startup.cs możemy zdefiniować i zmodyfikować zapytanie Http. Odbywa się to za pomocą metody app.Use(...), gdzie app to argument lambdy w metodzie Configure. Sa to kolejne kroki, przez które przechodzi zapytanie HTTP. Jest to niejako scentralizowane miejsce, gdzie obsługujemy te zapytania, także możemy pewne globalne akcje tam zaszyć. Metoda app.Use ma sygnaturę:
Use(Func<HttpContext, Func<Task>, Task> middleware)
które implementujemy następująco:
app.Use(async (context, nextAction) => {
// tutaj używamy obiektu context
// potem wywołujemy nextAction, aby zapytanie HTTP dalej było przetwarzane,
// lub nie, jeśli z jakiegoś powodu chcemy przerwać przetwarzanie, wówczas
// mamy do czynienia z tzw. short-circuting
// Np. przekazujemu do dalszego przetwarzania:
await nextAction();
});
Dobrą praktyką jest tutaj definiowanie metod rozszerzeń, zachowując konwencję Use<MIDDLEWARE>, np. UseCookiesVerification.
Wywołania kolejnych middleware:
midd 1
-> midd 2
-> app.Run
reszta midd 2 <-
reszta midd 1 <-
Metoda app.Run odwraca kończy ten łancuch wywołań.