Walidacja danych w ASP.NET MVC

2011-11-15 Walidacja danych w ASP.NET MVC public ActionResult Edit(Person person) { bool blad = false; if(person.Name.Trim().Length == 0) { ViewData...
Author: Jakub Zawadzki
7 downloads 0 Views 680KB Size
2011-11-15

Walidacja danych w ASP.NET MVC

public ActionResult Edit(Person person) { bool blad = false; if(person.Name.Trim().Length == 0) { ViewData["Blad1"] = "Nazwisko użytkownika jest wymagane" blad = true; } if(person.Age < 0 || person.Age > 120) { ViewData["Blad2"] = "Błędny zakres wieku osoby" blad = true; } if(blad==false) { csi.SaveData(person); return RedirectToAction("index"); } else return View(person); }

1.

Prosta walidacja

2.

Walidacja z Data Annotation

Właściwości: • IsValid

Metody: • AddModelError(string key, Exception exception) • AddModelError(string key, string errorMessage) • IsValidField(string key)

1

2011-11-15

public ActionResult Edit(Person person) { if(person.Name.Trim().Length == 0) ModelState.AddModelError("Name", "Nazwisko użytkownika jest wymagane"); if(person.Age > 0 && person.Age < 120) ModelState.AddModelError("Age", "Niepoprawy zakres"); if(ModelState.IsValid) { csi.SaveData(person); return RedirectToAction("index"); } else return View(person);

… if(ModelState.IsValid) { csi.SaveData(person); return RedirectToAction("index"); } else return View(person);

}

• Range

DEMO

• RegularExpression • Required • StringLength • DataType

2

2011-11-15

Reguły walidacji w ASP.NET MVC zapisuje się za pomocą tzw. Data Annotations

class Person { public string Name {set; get;} public int Age {set; get;} public string PhoneNumber {set; get;} }

class Person { [Required(ErrorMessage = "Pole wymagane")] [StringLength(50, ErrorMessage = "Długość nie większa niż 50 znaków")] public string Name {set; get;} [Range(0, 100)] public int Age {set; get;} [RegularExpression(@"(\d{3})-\d{3}-\d{3}")] public string PhoneNumber {set; get;} }

class Person { [Required] [StringLength(50)] public string Name {set; get;} [Range(0, 100)] public int Age {set; get;} [RegularExpression(@"(\d{3})-\d{3}-\d{3}")] public string PhoneNumber {set; get;} }

public ActionResult Create(Person data) { if(ModelState.IsValid) { csi.SaveData(person); return RedirectToAction("index"); } else return View(person); }

3

2011-11-15

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)]

DEMO

public class EvenAttribute : ValidationAttribute { public EvenAttribute() { } public override bool IsValid(object value) { if(value == null) return true; else return (value as int)%2 == 0 ? true : false; } }

Autentykacja w ASP.NET MVC Autentykacja – proces rozpoznawania użytkownika na podstawie dostarczonych informacji.

Autoryzacja – proces sprawdzania czy użytkownik ma dostateczne uprawnienia do wykonania żądanej czynności.

4

2011-11-15

Narzędzie do konfiguracji stron ASP.NET dostarczane razem z Visual Studio.

Uruchamiane z menu Project > ASP.NET Configuration

• Jeżeli razem z Visual Studio został zainstalowany SQL Server Express Edition, to informacje o użytkownikach, rolach itd. są przechowywane w lokalnej bazie danych umieszczonej w katalogu App_Data. • Jeżeli dane mają być przechowywane na innym serwerze (ale serwerze SQL Server), to wtedy należy uruchomić narzędzie aspnet_regsql do jego skonfigurowania i dokonać odpowiednich wpisów w pliku web.config

5

2011-11-15

Autentykacja

Forms

Windows

6

2011-11-15

[Authorize] public ActionResult Edit(int id) { … } [Authorize(Users="Admin, Editor")] public ActionResult Edit(int id) { … }

Uwaga! Tylko ASP.NET

[Authorize(Roles="Administrators")] public ActionResult Edit(int id) { … }

7

2011-11-15

Membership – klasa dostarczająca podstawową obsługę użytkowników. Umożliwia m. in. dodawanie nowego użytkownika, usuwanie użytkownika, modyfikowanie informacji o użytkowniku, generowanie listy użytkowników. MembershipUser – klasa dostarczająca podstawowych informacji na temat konkretnego użytkownika. Umożliwia m.in. zmianę hasła, określenie czy użytkownik jest aktualnie zalogowany, kiedy użytkownik ostatni raz się logował.

Personalizacja – dostosowywanie wyglądu strony internetowej w zależności od zalogowanego użytkownika, dostarczonych przez niego informacji lub historii jego aktywności na stronie.

Mechanizm ASP.NET Profiles – umożliwia przechowywanie i dostęp do dodatkowych informacji o użytkowniku.

MembershipProvider – klasa abstrakcyjna definiująca funkcjonalność dla źródła danych (data providers), które ma być wykorzystane z mechanizmem Memberships.

Routing Trasa jest wzorcem URL mapowanym na odpowiedni uchwyt, którym może być: • fizyczny plik na dysku • klasa, która może przetworzyć żądanie

8

2011-11-15

Wzorce URL składają się z segmentów rozdzielonych znakiem slash. Każdy segment może zawierać stałe znakowe jak również zmienne, przy czym zmienne muszą być objęte nawiasami klamrowymi /Produkty/{kategoria_produktow} /Faktury/{Rok}/{Miesiac}/{Dzien} /Artykuly/{Rok}-{Miesiac}-{Dzien}

DEMO

{controller}/{action}/{id} {controller}.mvc/{action}/{id}

Każdej zmiennej we wzorcu URL można przypisać wartość domyślną, która będzie wykorzystana w przypadku, gdy nie podamy jej wartości.

{controller}/{action}/{id} /

controller = "Home" (wartość domyślna), action = "Index" (wartość domyślna)

/Osoba/

controller = "Osoba" , action = "Index" (wartość domyślna)

/Osoba/Edit/5

controller = "Osoba" , action = "Edit" id = 5

Trasy są wybierane w kolejności dodawania. Tzn. wybrana będzie pierwsza pasująca trasa.

9

2011-11-15

Pozwalają na określenie jakie wartości mogą przyjmować zmienne. Jeżeli adres URL zawiera wartości, które są poza zakresem taka trasa jest ignorowana. Ograniczenia mogą być definiowane jako: • •

wyrażenie regularne (string) obiekty implementujące interfejs IRouteConstraint

Adresy URL : • powinny być proste i jasne • powinny być krótkie • powinny zawierać podkreślenie "_" zamiast spacji (%20)

public interface IRouteConstraint { bool Match( HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection ) }

Jeżeli pierwsze żądanie dla aplikacji wykonaj zawartość pliku global.asax Wykonanie routingu (UrlRoutingModule) Stworzenie uchwytu żądania MVC Stworzenie kontrolera (DefaultControllerFactory)

• powinny być "hackowalne" przez użytkownika • nie powinny zawierać identyfikatorów bazy danych • powinny wspierać "niejednoznaczność"

Wywołanie metody Execute Wywołanie akcji (ControllerActionInvoker) Przetworzenie wyniku

10

2011-11-15

public interface IRouteHandler { IHttpHandler GetHttpHandler( RequestContext requestContext ) }

public IHttpHandler GetHttpHandler( RequestContext requestContext) { var routeData = requestContext.RouteData; routeData.Values["action"] += "ByName"; return new MvcHandler(requestContext); }

routes.Add( "ByName", new Route( "Kontakty/{Name}/{action}" , new RouteValueDictionary( new { controller = "Osoba", action = "Display" }) , new Additions.ChangeActionNameHandler() ) );

11

Suggest Documents