Ошибка: запрос совпал с несколькими конечными точками, когда я наследую от BaseController

Я создал 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);
    }
}
Станислав
Вопрос задан14 февраля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.