Ciao Salvo, grazie per il post, è ben gradito.
Devo integrare quello che ti ho scritto prima.
Puoi restituire un file all'utente usando un Controller di ASP.NET Core MVC.
In realtà puoi anche fare tutto da una Razor Page, non serve creare un apposito controller. Leggi qui:
https://www.mikesdotnetting.com/article/318/working-with-json-in-razor-pagesNel caso in cui tu debba restituire del json, puoi semplicemente creare un altro metodo nella stessa Razor Page chiamato ad esempio OnGetCarList() e richiamarlo da ajax con una richiesta GET all'url "nomerazorpage/CarList".
In quell'articolo trovi anche un link ai "named handlers", leggi anche quello perché è importante alla comprensione.
Chiaramente questo e' un esempio molto banale, ma obiettivamente parlando quante classi avrei dovuto scrivere per arrivare a questo stesso risultato con MVC?
Per realizzare quell'esempio avresti dovuto scrivere una classe in più: il model per la view.
Con RazorPages, il "codebehind" agisce contemporaneamente da controller e da model per la view (anche chiamato "viewmodel"). Con MVC, invece, queste sono classi separate. Vediamo il tuo esempio declinato in MVC.
La view razor resta quasi identica:
//File: /Views/Home/Index.cshtml
@model WebApplication1.Models.ViewModels.HomeViewModel
<h1>Welcome</h1>
<p>Ciao @Model.Nome!</p>
Creiamo ora la classe del view model, che è la classe extra da creare.
//File: /Models/ViewModels/HomeViewModel.cs
namespace WebApplication1.Models.ViewModels {
public class HomeViewModel {
public string Nome { get; set; }
}
}
Ora creiamo il controller, che assomiglia al codebehind di una Razor Page. Come differenza, nota come la proprietà Nome non appartenga al controller ma alla classe HomeViewModel che abbiamo creato qui sopra.
//File: /Controllers/HomeController.cs
public class HomeController : Controller
{
public IActionResult Index()
{
var viewModel = new HomeViewModel { Nome = "Moreno" };
return View(viewModel);
}
}
La differenza quindi non è moltissima e infatti sia MVC che Razor Pages sono state costruite sullo stesso stack tecnologico.
Il fatto che si debba creare una classe in più, generalmente, non è un problema. Qualcuno lo preferisce perché così tiene separate le responsabilità del controller, che sono quelle di coordinare la produzione di un risultato per l'utente, dalla responsabilità di un viewmodel che è semplicemente quella di trasportare dei dati. E' un po' lo stesso motivo per cui alcuni preferiscono tenere la lavatrice in bagno mentre altri nel garage.
Forse l'unica difficoltà di MVC consiste nel capire come ASP.NET Core mappa le richieste ai rispettivi controller e action. In Razor Pages, invece, il file .cshtml esiste fisicamente e quindi basta digitarne il nome nell'url per richiamarlo.
Inoltre, i file di codice di MVC sono organizzati per responsabilità ("Controllers", "Models" e "Views") mentre nel caso di Razor Pages i file correlati (view e codebehind) si trovano vicini, nella stessa cartella.
Comunque, sia MVC che Razor Pages sono approcci ugualmente validi per costruire applicazioni, quindi puoi scegliere quello che preferisci. Credo che gli sviluppatori siano spaccati in due in questo riguardo: chi preferisce continuare ad usare MVC è molto probabile che abbia odiato WebForms e le abitudini sono dure da cambiare.
In ASP.NET Core l'unica soluzione e' passare per NUGet?
NuGet è la soluzione di gran lunga preferita perché ti permette di procurarti una libreria in maniera molto facile. Basta digitare:
dotnet add package Newtonsoft.Json
Aggiungere la dll nella directory bin non è sufficiente perché, nel momento in cui vuoi usare l'oggetto JsonConvert, la compilazione fallirebbe. E' necessario che il riferimento alla libreria sia presente nel file .csproj, e questo viene aggiunto automaticamente quando ottieni la libreria con NuGet.
Invece, per quanto riguarda le tue librerie, se per il momento preferisci non inserirle in pacchetti NuGet, puoi aggiungere manualmente il riferimento alla .dll nel file .csproj come ti dicevo prima. Trovi le istruzioni qui:
https://stackoverflow.com/questions/46815546/how-to-add-external-assembly-dll-to-net-core-2-0-on-visual-studio-code
ciao,
Moreno
Modificato da BrightSoul il 23 settembre 2018 20.08 -