vista varias valor una tipo por pasar parámetros parametros net mvc llamar llamando lista httppost enviar desde datos crear controlador asp acciones asp.net-mvc-3

asp.net mvc 3 - varias - Obtener los valores de los parámetros de acción dentro de un filtro de acción



pasar datos de una vista a un controlador c# (2)

Tengo una acción que estoy haciendo POSTING desde jquery:

[HttpPost] public void UpdateGroupName(int groupId, string name) { authorisationRepository.UpdateGroupName(groupId, name); }

Esto funciona bien con groupId y name . Tengo algunas otras acciones grupales, por lo que me gustaría utilizar un atributo de autorización para asegurarme de que la persona que realiza el cambio tenga permiso para realizar el cambio.

Ya tengo un AuthorizationAttribute que recupera el groupId éxito en solicitudes GET accediendo filterContext.HttpContext.Request.Params["groupId"] pero cuando se trata de POSTs no funciona. El Request.Form está vacío y también lo es Request.Params .

Aquí está el código que tengo en mi atributo de autorización:

public int groupId { get; set; } protected override bool AuthorizeCore(HttpContextBase httpContext) { username = httpContext.User.Identity.Name.Split(''//').Last(); // awesome permissions checking goes here... return authorized; } public override void OnAuthorization(AuthorizationContext filterContext) { groupId = int.Parse(filterContext.HttpContext.Request.Params["groupId"]); // this line throws an exception base.OnAuthorization(filterContext); }

He visto esta respuesta, pero mi propiedad Form está vacía :(

Actualizado para mostrar la publicación de jquery:

var serverComm = { post: function (url, data) { return $.ajax({ url: url, type: ''POST'', contentType: ''application/json; charset=utf-8'', data: JSON.stringify(data) }); }, get: function (url, data) { return $.ajax({ url: url, type: ''GET'', cache: false, contentType: ''application/json; charset=utf-8'', data: data }); } }; // some awesome code later... serverComm.post(editGroupNameUrl, { groupId: group.id, name: newName })


La razón por la que su código no funciona es porque está enviando su solicitud como una cadena JSON. Por lo tanto, no hay parámetros de solicitud en el cuerpo POST y no puede obtenerlos en Request.Params .

Entonces, en lugar de:

filterContext.HttpContext.Request.Params["groupId"]

utilizar:

filterContext.Controller.ValueProvider.GetValue("groupId").AttemptedValue

Esto consultará el proveedor de valor (en su caso, el proveedor de valor de Json) para obtener el valor correspondiente enviado por el cliente.


Pruebe sin el stringify. Supongo que MVC está comprendiendo otra forma de vincular además del parámetro de solicitud -> parámetro de acción. Supongo que está entendiendo el json publicado. JQuery, si pasa solo el objeto de datos (sin stringify) publicará cada campo como un parámetro de solicitud (al menos, eso creo). Es fácil de probar :)