Search code examples
asp.net-mvcpostcontrollergetasp-net-mvc-1

post and get with same method signature


In my controller I have two actions called "Friends". The one that executes depends on whether or not it's a "get" versus a "post".

So my code snippets look something like this:

// Get:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Friends()
{
    // do some stuff
    return View();
}

// Post:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Friends()
{
    // do some stuff
    return View();
}

However, this does not compile since I have two methods with the same signature (Friends). How do I go about creating this? Do I need to create just one action but differentiate between a "get" and "post" inside of it? If so, how do I do that?


Solution

  • Rename the second method to something else like "Friends_Post" and then you can add [ActionName("Friends")] attribute to the second one. So the requests to the Friend action with POST as request type, will be handled by that action.

    // Get:
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Friends()
    {
        // do some stuff
        return View();
    }
    
    // Post:
    [ActionName("Friends")]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Friends_Post()
    {
        // do some stuff
        return View();
    }