Я создал BaseController для управления доступом к методам всех дочерних контроллеров, и он находится в следующем codeе:
И я создал ProjectController:
Как вы можете видеть в предыдущем codeе, BaseController считывает запись из базы данных, чтобы получить разрешение дочернего контроллера. Значения разрешений ProjectController:
Он отлично работает с методом Add()
, потому что он возвращает NoContent()
, когда IsAdd имеет значение true, но он выдает мне ошибку "The request match multiple endpoints", когда я пытаюсь получить доступ к методу Edit()
, потому что IsEdit имеет значение false
Я пытался вернуть RedirectToPage
из дочернего класса ProjectController, чтобы проверить, является ли RedirectToPage
проблемой, но это не так.
Я был бы признателен за любую помощь.
Спасибо, ребята.
public class BaseController : Controller
{
protected readonly IUnitOfWork _unitOfWork;
protected ControllerPermission ControllerPermission { get; set; }
private string controllerName;
public BaseController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
controllerName = this.GetType().Name[..^10];
ControllerPermission = _unitOfWork.ControllerPermission.GetFirstOrDefault(
x => x.Name == controllerName);
}
public virtual IActionResult Add()
{
if (ControllerPermission.IsAdd)
{
return NoContent();
}
return RedirectToPage("/NotAllowed");
}
public virtual IActionResult Edit()
{
if (!ControllerPermission.IsEdit)
{
return RedirectToAction("Index", "Project");
}
return NoContent();
}
public virtual IActionResult Delete()
{
if (ControllerPermission.IsDelete)
{
return NoContent();
}
return RedirectToPage("/NotAllowed");
}
}
[BindProperties]
public class ProjectController : BaseController
{
public IEnumerable<Project>? Projects { get; set; }
public Project? Project { get; set; }
public ProjectController(IUnitOfWork unitOfWork) : base (unitOfWork)
{
}
public IActionResult Index()
{
Projects = _unitOfWork.Project.GetAll();
return View(Projects);
}
public IActionResult Details()
{
return View(Project);
}
public override IActionResult Add()
{
base.Add();
if (Request.Method == "POST" && Project != null)
{
if (ModelState.IsValid)
{
_unitOfWork.Project.Add(Project);
_unitOfWork.Save();
}
}
return View(Project);
}
public IActionResult Edit(int id)
{
base.Edit();
if (Request.Method == "POST" && Project != null)
{
if (ModelState.IsValid)
{
_unitOfWork.Project.Update(Project);
_unitOfWork.Save();
return RedirectToAction("Index");
}
}
else
{
Project = _unitOfWork.Project.GetFirstOrDefault(x => x.Id == id);
}
return RedirectToAction("Index", "Project");
}
public IActionResult Delete(int id)
{
base.Delete();
if (Request.Method == "POST" && Project != null)
{
if (ModelState.IsValid)
{
_unitOfWork.Project.Remove(Project);
_unitOfWork.Save();
return RedirectToAction("Index");
}
}
else
{
Project = _unitOfWork.Project.GetFirstOrDefault(x => x.Id == id);
}
return View(Project);
}
}