Pierwsze starcie z .Net Core na Linuxie zaliczone
– było ciężko, ale przede wszystkim z powodu małej ilości informacji lub przestarzałych źródeł (wersja 1.1, z której korzystam pojawiła się w listopadzie 2016 roku). Ucząc się nowej technologii skojarzyłem to co się dzieje w mojej głowie z tak zwanym modelem Tuckmana. Na początku mam dużą motywację do działania i robię research na temat danej technologii (forming), próbuje robić prosty program i wszystko wygląda ok. Po kilku dniach i mnogości informacji (niestety często niekompatybilnych z najnowszą wersją) przychodzi czas stormingu i spadek motywacji. Potykam się,
próbuje, googluje błędy i tak dalej. Wreszcie po znalezieniu odpowiednich materiałów, które między innymi znajdują się na oficjalnej stronie Microsoftu: Link, udaje mi się zrozumieć jak wgryźć się w nowy framework – następuje czas normingu. Wszystko zaczyna się powoli układać, terminal nie pluje błędami, słońce zaczyna przebijać się zza chmur (no bez przesady – mieszkam w Krakowie…). Po nabraniu wprawy, jestem w stanie coraz szybciej odnaleźć się w nowej technologii, błędy jeżeli występują rozwiązuje dosyć gładko (oczywiście bywają takie, na które nawet stack nie zna odpowiedzi), projekt zaczyna nabierać kształtów – to zdecydowanie performing!
Źródło: http://www.hfhr.org.pl
Tyle tytułem wstępu, czas na konkrety.
Jak wprowadzić MVC do naszego projektu? Przede wszystkim należy dodać do zależności (dependencies) wpis odnośnie MVC (plik project.json):
"Microsoft.AspNetCore.Mvc": "1.1.2"
Dlaczego 1.1.2? Intellisens podpowiada nam jaka wersja jest najwyższa, wersjonowanie możemy również sprawdzić na stronie NuGet-a, np. https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc myślałem, że sama instalacja będzie trochę prostsza – tak jak to jest w zwykłym Nugetcie, ale wtyczki, które instalowałem nie chciały ze mną współpracować.
Ok czas na edycję pliku Startup.cs:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app) { app.UseDeveloperExceptionPage(); app.UseMvc(rb => { rb.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new {controller = "Home", action = "Index"}); }); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
W metodzie ConfigureServices dodajemy MVC do dostępnych serwisów. Metodę Configure należy uzupełnić również o wywołanie metody UseMvc oraz defaultowy route. Widząc tylko białą planszę przy zabawie z Controllerami i View dodałem obsługę strony z wyjątkami (UseDeveloperExceptionPage).
Jeśli chodzi o samą strukturę MVC nie ma jakiś specjalnych różnić, tworzymy katalog Controllers w nim jakiś plik np. HomeController.cs:
using Microsoft.AspNetCore.Mvc; namespace MVCApplicationIleZaIle.Controllers { public class HomeController : Controller { public IActionResult Index() { System.Console.WriteLine("HomeController - Index"); return View(); } } }
raczej wszystko powinno być jasne (nawet dla kogoś nie znającego C#).
Czas na widok. Plik powinien się znaleźć w Views->Home(bo tak nazywa się nasz kontroler) i w przypadku akcji Index po prostu nazwany Index.cshtml (cshtml rozszerza zwykły HTML o tak zwany markup language umożliwiający nam przekazywanie zmiennych, tworzenie pętli itp.). W widoku umieszczamy co dusza zapragnie, co wstawić na początek? A jakże HelloMVC!:
<!DOCTYPE html> <html> <head> <title>Hello</title> </head> <body> <div> <h1>Hello from MVC</h1> </div> </body> </html>
no i wszystko powinno działać, odpalam polecenie dotnet run iii…
Przed dodaniem UseDeveloperExceptionPage zobaczyłbym tylko białą stronę. Do rzeczy o co chodzi? Chwila googlowania i jest (ciekawe jakby świat wyglądał bez stackoverflow 🙂 :
http://stackoverflow.com/questions/38296877/what-are-buildoptions-and-preservecompilationcontext-used-for
Krótko mówiąc – chcąc korzystać z Razor-a musimy dodać wpis do pliku project.json w sekcji buildOptions:
"preserveCompilationContext": true
co ciekawe:
„preserveCompilationContext isn’t documented in the above page (yet), but it’s required when you are using Razor” – coś czuje, że takie smaczki będą na porządku dziennym 🙂
Ok po dodaniu tego wpisu pierwsza aplikacja MVC w .Net Core gotowa!