MVC w ASP.NET Core – pierwsze kroki

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!

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here

Loading Facebook Comments ...