Welcome to 16892 Developer Community-Open, Learning,Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I have the generic BaseController like this:

public class BaseController<T> : Controller where T : BaseEntity
{
    protected readonly IRepository _repository;

    public BaseController(IRepository repository)
    {
        _repository = repository;
    }

    // POST: TController/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public virtual async Task<IActionResult> Create(T item)
    {
        try
        {
            if (ModelState.IsValid)
            {
                await _repository.AddAsync(item);

            }
            return RedirectToAction(nameof(Index));
        }
        catch
        {
            return PartialView();
        }
    }

Do I correctly override this action in the derived controller class

public class PaysController : BaseController<Pays>
{
    public PaysController(IRepository repository): base(repository) { }

    // POST: Pays/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public override async Task<IActionResult> Create([Bind("IDPays,Code,Nom")] Pays pays)
    {
        return await base.Create(pays);
    }

Especially, should I reuse the method attributes(like ValidateAntiForgeryToken), and will the binding Bind work in that case?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
3.7k views
Welcome To Ask or Share your Answers For Others

1 Answer

Method attributes do not need to be reused on the overriden method:

var attributes = typeof(PaysController).GetMethod("Create").GetCustomAttributes(false);

Debug.Assert(attributes.Any(x => x.GetType() == typeof(HttpPostAttribute)));
Debug.Assert(attributes.Any(x => x.GetType() == typeof(ValidateAntiForgeryTokenAttribute)));

The binding Bind will work in the overrided method. You will need to mark the base controller as abstract, otherwise ASP.NET Core does not know, which controller and endpoint to choose and throws an exception:

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: The request matched multiple endpoints


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to 16892 Developer Community-Open, Learning and Share
...