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!



![How to configure a test mail server with the Docker? – Cooking notes [EN]](https://rafalstepien.com/wp-content/uploads/2018/07/docker_tests-100x70.png)

