Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de ASP.NET Core

Curso de ASP.NET Core

Juan Carlos Ruiz

Juan Carlos Ruiz

Ajuste de enrutamiento

24/35
Recursos

Aportes 21

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Otra forma es esta:

[Route("Asignatura/Index/{asignaturaId?}")]

otra manera de de menejar el comportamiento de index sin tener que poner los enrutamientos puede ser asi:

public IActionResult Index(String? asignaturaId){
	if(!string.IsNullOrWhiteSpace(asignaturaId){
		.......
	}else{
		........
	}
}


De igual modo podemos usar atributos para los métodos Http ([HttpGet], [HttpPost], [HttpPut], [HttpDelete]) y seguir usando el método Index para ambas acciones, eliminando el método MultiAsignaturas y llamando el atributo Route ([Route("[controller]")]) desde la clase, con eso me quedó así::

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using ProyectoEscuela.Models;

namespace ProyectoEscuela
{
    [Route("[controller]")]
    public class AsignaturaController: Controller
    {
        private EscuelaContext _context;

        public AsignaturaController(EscuelaContext context){
            _context = context;
        }

        [HttpGet]
        public IActionResult Index(){
            ViewBag.Fecha = DateTime.UtcNow.ToString();
            return View("MultiAsignatura",_context.Asignaturas);
        }

        [HttpGet("{asignaturaId}")]
        public IActionResult Index(string asignaturaId){
            var asignatura = from asig in _context.Asignaturas
                                where asig.Id == asignaturaId
                                select asig;

            return View(asignatura.SingleOrDefault());
        }
    }
}

Aunque no sé que tan correcto sea hacerlo de esa manera 😅

otra forma es usar:
return RedirectToAction(“MultiAsignatura”, “Asignatura”);

public IActionResult Index(string asignaturaId)
        {
            if(string.IsNullOrWhiteSpace(asignaturaId)){

                // LLAMA A OTRA VISTA
                return RedirectToAction("MultiAsignatura","Asignatura");
                
            }else{
            var asignatura = from asig in _context.asignaturas
            where asig.Id == asignaturaId select asig;

            ViewBag.fecha= DateTime.Now;  
            return View(asignatura.SingleOrDefault());
            }
        }

Agregué una validación porque se puede dar el caso donde el parámetro no sea null y que el query no encuentre la asignatura

            if (!string.IsNullOrWhiteSpace(asignaturaId))
            {
                var asignatura = from asig in _context.Asignaturas
                                 where asig.Id == asignaturaId
                                 select asig;
                return asignatura.Any() ? View(asignatura.SingleOrDefault()) : View("MultiAsignatura", _context.Asignaturas.ToList());
            }

Para manejar múltiples parámetros, se puede realizar lo siguiente:

[Route("Asignatura/Index/{asignaturaId}/{apiKey}")]
        public IActionResult Index(string asignaturaId, string apiKey)
        {
		...
	}	

Ejemplo de Llamada de la acción :
Asignatura/Index/6cf7e4c6-f185-47e5-bd00-ee243c8280d4/APIKEYVALUE

una forma mas sencilla de hacer el “query”

var asignatura = _context.Asignaturas.Where(asignatura=> asignatura. Id == asignaturaId).FirstOrDefault();

Es normal o recomendable utilizar == en lugar del equals para comparar Strings?

Muy interesante esta clase.

También usando el decorador [Route] con otra ruta se puede hacer sobracarga del método Index.
Sería algo así:

[Route("Asignatura/Index")]
public IActionResult Index()
{
return View(_context.Asignaturas.FirstOrDefault() );
}
[Route("Asignatura/Index/{asignaturaId}")]
public IActionResult Index(string asignaturaId)
{
var asignatura = from asig in _context.Asignaturas where asig.Id == asignaturaId select asig;
return View(asignatura.SingleOrDefault() );
}
public IActionResult Index(string asignaturaId)
  {  
    var asignatura = from asign in _context.Asignaturas
           where asign.Id == asignaturaId
           select asign;

    return View(asignatura.SingleOrDefault());
  }  

usando lamda

            var subject = _context.Subjects.FirstOrDefault(sub => sub.UniqueId == subjectId);

Excelente

si no manda ningun parametro no seria mejor que muestre una pagina de 404 Not found ??

La respuesta esta en tu corazon… JAJAJAJAJA

<code>

Genial ! Esto hace mas dinamicos los actions en los controladores

Si les falla el enrutamiento, prueben con esta forma:

[Route("Asignatura/{id?}", Name = "Index")]

[Route(“Asignatura/Index/{AsignaturaID?}”)]

Excelente ajuste en la navegación para mostrar datos correspondientes y adecuados según cada ruta

interesante el manejo de rutas en mvc.

Veo que la parte de la parte seguridad , no lo toca el profesor, ni validacion por token confimacion de email cosas muy importante que deberiamos de ver