dotnetrocks
dotnetrocks

Reputation: 2727

HttpPost in asp.net MVC 4

I am testing a push notification on a calendar application. When I create an event on calendar application, my website gets a HttpPost request with a JSON string. I wrote code like this but I couldn't receive the JSON string in my action method.

       [HttpPost]
       public ActionResult Push(String jsonReq)
       {
         Console.write(jsonReq);
         return View();
       }

When I create model in the same structure as JSON, then I can receive the request. it seems to be tightly coupled to JSON structure ? I am using in ASP.Net MVC 4.

     [HttpPost]
    public ActionResult Push(JSONModel jsonModel)
    {

        return View();
    }

Upvotes: 3

Views: 1823

Answers (2)

Andrei
Andrei

Reputation: 56688

ASP.NET MVC model binding works the following way - it parses the request, tries to find a name-to-name corresponding between its parameters and Action paramaters, and if found instantiates latter. You are not sending parameter with name jsonReq, so you cannot receive something in your action method.

If you really want to work with plan json string without letting ASP.NET MVC parse it for your, you have two options:

  1. Access it via HttpContext.Request inside the action
  2. Write custom model binder that will map the request body to the jsonReq parameter

Upvotes: 4

Brett
Brett

Reputation: 1140

The request would not have a value named jsonReq so would not know to map the json to that action parameter.

Where as your JSONModel will have property names that match the JSON named values coming into the request thus the object us populated.

Upvotes: 1

Related Questions