Hej.

W dniu 15.05.2018 wydawnictwo VideoPoint wraz z Helionem wydało mój kurs wideo n.t. wprowadzenia do testów w .Net Core 2.0. Z okazji premiery kurs jest w promocyjnej niższej cenie wraz z gratisowym ebook'iem. Wszelkie informacje oraz spis tresci znajduje się na stronie kursu: https://videopoint.pl/go-net-core-2

Pozdrawiam!

#csharp #netcore #aspnetcore #unittest #dotnet #naukaprogramowania #programowanie
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mam klasę a w niej kolekcję ICollection, gdzie ma być od 1 do 10 elementów. Można dać ICollection w parametrze konstruktora, czy należy dodawać każdy element oddzielnie (T objekt1, T objekt2 itd)? Wydaje się to problematyczne i mało czytelne, bo wtedy konstruktorów będzie co najmniej ponad 20, z czego większość będzie się jedynie różnić ilością T, które mają trafić do ICollection, ale z drugiej strony i tak będę mieć metody dodającą i
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Czy poza dodaniem atrybutu [DatabaseGenerated(DatabaseGeneratedOption.Identity)] do właściwości Id powinienem jeszcze coś z tym zrobić, np dodać int Id jako parametr do konstruktora klasy (albo napisać jakąś metodę), czy może atrybut załatwia wszystko i Id tak czy siak będzie ustawione?

#naukaprogramowania #csharp #mssql #entityframeworkcore #aspnetcore
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Goglez: [Key] oprócz wskazywania na klucz robi też to samo co [DatabaseGenerated(DatabaseGeneratedOption.Identity)] jak kolumna jest odpowiedniego typu (np. właśnie int) także nic innego oprócz [Key] nie musisz używać do klucza głównego.
  • Odpowiedz
@Goglez:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] - wartość w danej kolumnie będzie zmieniona tylko podczas dodawania rekordu, nie będzie zmieniana podczas updejtu. Dodajesz go do kolumny, którym chcesz nadać wartość tylko podczas dodawania za pierwszym razem. Np kolumna 'created' z datą rejestracji użytkownika.

[Key] - będzie to klucz główny w tabeli. Jeżeli kolumna nazywa się Id albo jakasNazwaZakończonaId, to nie musisz dodawać tego atrybutu, bo EF automatycznie doda taki klucz (ale dla przejrzystości kodu
  • Odpowiedz
Mam problem, robię sobie projekt (ASP.NET Core 2.0), gdzie będzie kilka ról (używam JWT), każda będzie rozszerzoną wersją innej (user ma swoje prawa, mod jest userem + modem, admin ma moda plus coś jeszcze itp), prosta hierarchia. Da się zrobić tak, żeby user mógł mieć jedną rolę (skoro jest modem, to wiadomo że jest też userem) z pominięciem niższych i nie dodawać wielu ról do [authorize]? Chodzi mi o to, żeby do
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Goglez: services.AddAuthorization(x => x.AddPolicy("IsUserOrAbove", p => p.RequireRole("admin", "mod", "user")));

cos na takiej zasadzie. I potem kontroler oznaczasz:
[Authorize(Policy = "IsUserOrAbove")]

i analogicznie inne
  • Odpowiedz
@VVelur: Odpalanie dotnet w WebAssembly dzięki czemu możesz właściwie napisać SPA w C# i HTML5.
Z tego co pokazali to działało nawet debugowanie kodu C# w chromie.

Kompletnie bez JS.
  • Odpowiedz
Czasami to trudno zdefiniować problem tak, żeby się zmieścił w okienku googla ;)
Mam dwa projekty w jednym rozwiązaniu. Jeden z nich to główny projekt (niech będzie Product.Web - utworzony jako Web App MVC), drugi w zasadzie wyłącznie obsługuje pewnego rodzaju API (nazwijmy go Product.API - utworzony jako Web API). "W zasadzie", ponieważ mam w tym projekcie akcję, która powinna zwrócić normalny kod html. Wynika to z logiki aplikacji - Product.API nie
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@singollo: Popatrz na to tak, że po publikacji na jakimś IIS, projekt "Project.API" trafi po prostu do jednej dllki w podkatalogu "bin". Dlatego jeżeli będzie szukał czegoś w ../Views/xxx to będzie to podkatalog z głównego projektu "Product.Web"
  • Odpowiedz
Hej Mirki. Pracuję nad web appem, gdzie FE jest w angularze i mam problem z ustaleniem odpowiedniej konwencji dla obsługi powrotnych statusów z kodami błędów.
Mam na myśli, nie zwracanie prostego BadRequestu ale opakowanie kodów błędów w jakiś model, który mógłby być prosto interpretowany w Angularze.

Więc mam ustalony cel i uważam, że to dobry pomysł ale kompletnie nie mam pomysłu jak to zrealizować. Tzn. za każdym razem zatrzymuje się w momencie
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@w_o_w: najlepiej chyba dorzucic do pipeline jakis ErrorHandlerMiddleware ktory bedzie lapal wyjatki rzucane przez serwisy, repozytoria lub obiekty domenowe. Niech te obiekty rzucaja wyjatki w sensowny sposob - np. te dotyczace autoryzacji niech beda UnauthorizedAccessException, te z serwisow ServiceException (wlasna klasa dziedziczaca po Exception itp.
Middleware niech na podstawie tego co zlapal (pattern matching) ustawia odpowiedni http status code odpowiedzi i w payload zwraca jakies dodatkowe info w stylu kod
  • Odpowiedz
@w_o_w: z kolei na froncie daj inny middleware do serwisu obslugjacego zapytania http / fetch. Znane mi frameworki (vue i aurelia ale zakladam ze i kazdy inny sensowny) daja mozliwosc ustawienia interceptorow na wszystkie żądania wychodzace / odpowiedzi wracajace. Mozna wiec w pipeline wstrzyknac prosta kontrole ktora sprawdza jaki kod wrocil z backendu i jezeli jest to cos innego niz 2XX to robi reject na promisie oraz wyswietla np. modala
  • Odpowiedz
Robię sobie taka prościutką aplikację Todo z wykorzystaniem asp net core i jako bazy danych używam mongodb.

W relacyjnej bazie danych zapisywałbym w osobnych tabelach projekty oraz zadania, to też stworzyłbym sobie osobne repozytoria do wykonywania odpowiednich operacji CRUD-owych.

A skoro w MongoDb mogę zapisywać całe obiekty to powinienem stworzyć jedno repozytorium TodoRepository i tam metody w stylu:
- AddProject(),
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@bielu000: Nie ma jednego słusznego rozwiązania. Są różne podejścia, ale dobrze jest przyjąć jakiś jeden spójny poziom abstrakcji. Czyli np. ProjectRepository, w którym masz operacje CRUDowe związane z projektem oraz osobne TaskRepository związane z taskami. Dyskusyjne są takie operacje jak AddTaskToProject(), bo to już trochę bardziej płynne, choć w tym konkretnym przypadku bardziej TaskRepository (bo albo to jest w ramach dodawania nowego taska, albo w ramach jego edycji).
Robienie jednego
  • Odpowiedz
@bielu000 nie polecam ani nie zniechęcam ale prawda jest taka że wg zaleceń ms nie powinno się implementowac repozytoriow dla ef w wersji bodajże 6 I wyższych bo dbcontext jako tako jest implementacją wzorca repozytorium i też unit of work czyli możesz robić warstwę serwisów i tam operować na dbcontext
  • Odpowiedz
#aspnet #aspnetcore #csharp #programowanie

Chciałbym dać użytkownikom możliwość używania mojej aplikacji bez konieczności logowania. Generuję więc losowe ciasteczko, które posłuży jako identyfikator w bazie (zamiast nazwy użytkownika w przypadku bycia zalogowanym).

W Asp.NET Core Identity informacje o nazwie i identyfikatorze zalogowanego użytkownika przechowywane są w tym miejscu:

context.User.Identity.Name
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Elo mireczki. Potrzebuję zrobić chat oraz system powiadomień w czasie rzeczywistym w #aspnetcore rest api i pytanie jak do tego podejść? SignalR Core jest w fazie alpha i nie wiem czy jest obecnie sens tego używać. Jakaś alternatywa do tego? Czy może pisać w czystym AspNetCore.WebSockets?

#dotnet #csharp
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Treść przeznaczona dla osób powyżej 18 roku życia...
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@hiroszi: ok jest za wcześnie i nie widziałem .core :( core raczej mało a z tego co rozmawialem ze znajomymi dużo firm eksperymentuje z .net core w prywatnych projektach więc może się to jakoś ruszy
  • Odpowiedz
Mam w kontrolerach kilka metod, które pełnią jakąś określoną funkcję (np. sprawdzają czy użytkownik jest właścicielem jakiegoś rekordu w bazie). W każdym z kontrolerów mam ten sam zestaw metod, kopiuję je za każdym razem gdy tworzę nowy kontroler.
Przydałoby się to zebrać jakoś do kupy, żeby wszystkie kontrolery brały te metody z jednego miejsca. Jaki jest na to najlepszy sposób? Jak to się zazwyczaj robi? Użyć (w jakiś sposób) Dependency Injection? Utworzyć
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#aspnet #aspnetcore #programowanie #itsecurity

Zamierzam zmodyfikować trochę mechanizm logowania w mojej aplikacji ASP.net Core i w związku z tym może się pojawić możliwość, że coś przeoczę i w wyniku błędu niepowołane osoby uzyskają dostęp do nieprzeznaczonego dla nich Controllera. Słyszałem, że dobrym pomysłem jest używanie Unit Testów, do automatycznego testowania najistotniejszych części mojej aplikacji, z tym że nigdy czymś takim się nie zajmowałem.

Wyobrażam sobie
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Wunderwafel: To nie są testy jednostkowe. To już podchodzi pod testy REST API.
Potrzebujesz narzędzia, w którym przygotowujesz scenariusz - Logowanie -> Kontrolery -> Assert, czy uzyskałeś dostęp czy nie.

Może Postman da radę (To jedyna rzecz, jaka mi przychodzi do głowy. Jeśli nie da rady, to szukaj czegoś innego [Albo pisz sam oddzielną aplikację do testowania.])
  • Odpowiedz