Posts Tagged - razorpages

Razor Pages - Prevent Overposting

Si las clases contienen secretos, aunque estos no se muestren en la web, hay maneras de introducir datos en un Creation aunque el form no tenga un campo para ello.

Ejemplo de clase con secretos Student.cs

public class Student
{
	public int ID { get; set; }
	public string LastName { get; set; }
	public string FirstMidName { get; set; }
	public DateTime EnrollmentDate { get; set; }
	
	// an atacker may set a Secret on creation ...
	public string Secret { get; set; }
	// ... or he may enroll the Student in Courses he shouldn't
	public ICollection<Enrollment> Enrollments { get; set; } = [];
}

Hay varias alternativas para evitar esto:

  • Usar ViewModels
  • Usar TryUpdateModelAsync

ViewModels

Una buena práctica es usar ViewModels (se puede meter en la misma Student.cs)

public class StudentVM
{
	public int ID { get; set; }
	public string LastName { get; set; }
	public string FirstMidName { get; set; }
	public DateTime EnrollmentDate { get; set; }
}

Y operamos a través del ViewModel en las vistas para crear un nuevo Student, por lo que no pueden meter un secreto ni otras relaciones.

[BindProperty]
public StudentVM StudentVM { get; set; }

public async Task<IActionResult> OnPostAsync()
{
	if (!ModelState.IsValid)
	{
		return Page();
	}
	
	var entry = _context.Add(new Student());
	entry.CurrentValues.SetValues(StudentVM);
	await _context.SaveChangesAsync();
	return RedirectToPage("./Index");
}

Para que esto funcione las clases no tienen porque estar relacionadas, pero sus properties si que tienen que ser iguales.

Read More

Razor Pages - Basic Usage

Automate CRUD creation

Con Visual Studio es posible automatizar la creación de CRUDs y sus vistas.

Click derecho > agregar > Página de Razor Cursor overview

Páginas de Razor que usan Entity Framework (CRUD) Cursor overview

Seleccionamos todos los datos necesarios Cursor overview

Esto crea todas sus vistas y código necesario Cursor overview

Read More