Curso de ASP.NET
En este repositorio se encuentran los proyectos realizados en el curso de ASP.NET
dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 8.0.0-preview.4.23259.3
dotnet add package Microsoft.EntityFrameworkCore.Design --version 8.0.0-preview.4.23259.3
dotnet add package Microsoft.EntityFrameworkCore.Tools --version 8.0.0-preview.4.23259.3
appsettings.Development.json
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=Proyecto3MVCTareas;User=sa;Password=TU_PASSWORD;Trusted_Connection=False;MultipleActiveResultSets=true;TrustServerCertificate=True"
},
namespace TareasMVC.Entidades
{
public class Tarea
{
public int Id { get; set; }
public string Titulo { get; set; }
public string Descripcion { get; set; }
public int Orden { get; set; }
public DateTime FechaCreacion { get; set; }
}
}
[StringLength(250)]
[Required]
public string Titulo { get; set; }
En el ApplicationDbContext:
override protected void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Tarea>().Property(t => t.Titulo).HasMaxLength(50).IsRequired();
}
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions options) : base(options)
{
}
// DbSet le indica a Entity Framework Core que Tareas es una Entidad
public DbSet<Tarea> Tareas { get; set; }
}
builder.Services.AddDbContext<ApplicationDbContext>(opciones => opciones.UseSqlServer("name=DefaultConnection"));
dotnet ef migrations add Tareas
dotnet ef update database
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore --version 8.0.0-preview.4.23260.4
Cambiar:
public class ApplicationDbContext : DbContext
a:
public class ApplicationDbContext : IdentityDbContext
dotnet ef migrations add Usuarios
dotnet ef database update
builder.Services.AddAuthentication();
builder.Services.AddIdentity<IdentityUser, IdentityRole>(opciones =>
{
opciones.SignIn.RequireConfirmedAccount = false;
}).AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
builder.Services.PostConfigure<CookieAuthenticationOptions>(IdentityConstants.ApplicationScheme, opciones =>
{
opciones.LoginPath = "/Usuarios/Login";
opciones.AccessDeniedPath = "/Usuarios/Login";
}
);
antes de app.useAuthorization()
app.UseAuthentication();
var politicasUsuarioAutenticados = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
builder.Services.AddControllersWithViews(opciones =>
{
opciones.Filters.Add(new AuthorizeFilter(politicasUsuarioAutenticados));
});
[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> Registro(RegistroViewModel modelo)
{
if (!ModelState.IsValid)
{
return View(modelo);
}
var usuario = new IdentityUser
{
Email = modelo.Email,
UserName = modelo.Email
};
var resultado = await userManager.CreateAsync(usuario, password: modelo.Password);
if (resultado.Succeeded)
{
await signInManager.SignInAsync(usuario, isPersistent: true);
return RedirectToAction("Index", "Home");
}
else
{
foreach (var error in resultado.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
return View(modelo);
}
}
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Login(LoginViewModel modelo)
{
if(!ModelState.IsValid)
{
return View(modelo);
}
var resultado = await signInManager.PasswordSignInAsync(modelo.Email, modelo.Password, modelo.Recuerdame, lockoutOnFailure: false);
if(resultado.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError(string.Empty, "Usuario o contraseña no válido");
return View(modelo);
}
}
[HttpPost]
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(IdentityConstants.ApplicationScheme);
return RedirectToAction("Index", "Transacciones");
}
Es el proceso de tener una aplicación que funcione para distintas culturas.
Se divide en dos partes:
- Globalización
- Localozación
Es el proceso de diseñar una aplicación para que funcione con distintas culturas.
Es el proceso de tomar una aplicación globalizada y aplicarle una cultura especifica.
En la clase Program.cs
builder.Services.AddLocalization();
Implementanto Localización en homeController:
-
Inyección de dependencia IStringLocalizer:
public HomeController(ILogger<HomeController> logger, IStringLocalizer<HomeController> localizer) { _logger = logger; this.localizer = localizer; }
-
Utilizando localizer (Ejemplo utilizando el ViewBag):
public IActionResult Index() { ViewBag.Saludo = localizer["Buenos días"]; return View(); }
var culturasUISoportadas = new[] { "es", "en" };
app.UseRequestLocalization(opciones =>
{
opciones.DefaultRequestCulture = new RequestCulture("es");
opciones.SupportedCultures = culturasUISoportadas.Select(cultura => new CultureInfo(cultura)).ToList();
});
-
Crear la carpeta Recursos en la raíz.
builder.Services.AddLocalization(opciones => { opciones.ResourcesPath = "Recursos"; });
// Add services to the container.
builder.Services.AddControllersWithViews(opciones =>
{
opciones.Filters.Add(new AuthorizeFilter(politicasUsuarioAutenticados));
}).AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);