Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.net MVC 3 - Getting posted JSON data in OnActionExecuting

Im posting data to an actin using the $.ajax method in jquery, specifying the data to be posted using the data field to pass the JSON stringified values.

These are posted to the action OK but I cant get them in an OnActionExecuting action filter (they're not part of the Forms or Params collections). Is there any way to get them and if not, could you tell share why not?

like image 202
Steve Ward Avatar asked Feb 22 '11 23:02

Steve Ward


1 Answers

If your action takes a model:

[HttpPost]
public ActionResult About(SomeViewModel model)
{
    return Json(model);
}

you could directly this parameter value because the JsonValueProviderFactory would have parsed it already:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);
    SomeViewModel model = filterContext.ActionParameters["model"] as SomeViewModel;
}

If there is no model (why wouldn't there be?) you could read the JSON from the request stream:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);
    filterContext.HttpContext.Request.InputStream.Position = 0;
    using (var reader = new StreamReader(filterContext.HttpContext.Request.InputStream))
    {
        string json = reader.ReadToEnd();
    }
}
like image 168
Darin Dimitrov Avatar answered Nov 15 '22 06:11

Darin Dimitrov