validateantiforgerytoken requestverificationtoken asp.net jquery post

requestverificationtoken - jQuery AJAX Call para publicar datos en la página ASP.Net(no Get pero POST)



__ requestverificationtoken (1)

Opción 1. Mantenga el código del lado de su servidor igual.

Primero quite el kendo.stringify . Luego elimine el contentType o cámbielo a ...

"application/x-www-form-urlencoded; charset=utf-8"

... o cambie su llamada $ .ajax a esto:

$.post(''DocSummaryDataAsync.aspx'', { vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: ''TotalCount'' }, function (data) { });

Opción 2. Cambiar el POST a GET

Me gusta esto

$.ajax({ async: true, type: "GET", etc.

Esto pasará sus datos a través de QueryString. Si eliminas la llamada de kendo.stringify, accederás a todos los valores como este:

string vendorId = Request.QueryString[0]; string businessUnit = Request.QueryString[1]; etc.

Opción 3. Usa tu llamada original de $ .ajax

Si usa su $ .ajax original, entonces se aplica lo siguiente:

Request.Params obtiene una "colección combinada de elementos QueryString, Form, Cookies y ServerVariables". - este enlace

No estás trabajando con ninguno de esos. En su lugar, necesita acceder a Request.InputStream.

Así es como puedes hacer eso:

Cree una clase en el lado del servidor que se asigne al objeto JSON solicitado, por ejemplo,

public class MyClass { // The type (int or string) should probably correspond to the JSON public int vendorId { get; set; } public string businessUnit { get; set; } public string productSegmentId { get; set; } public string programId { get; set; } public string productManagerId { get; set; } public string companyIds { get; set; } public string expired { get; set; } public string requestType { get; set; } }

Convierta Request.InputStream en ese tipo, y luego puede usarlo.

public void ProcessRequest() { System.IO.Stream body = Request.InputStream; System.Text.Encoding encoding = Request.ContentEncoding; System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); string json = reader.ReadToEnd(); JavaScriptSerializer serializer = new JavaScriptSerializer(); MyClass myclass = (MyClass)serializer.Deserialize(json, typeof(MyClass)); int vendorId = myclass.vendorId; string requestType = myclass.requestType; // etc... } protected void Page_Load(object sender, EventArgs e) { ProcessRequest(); }

Tengo la siguiente llamada jQuery AJAX a una página ASP.Net.

$.ajax({ async: true, type: "POST", url: "DocSummaryDataAsync.aspx", //"DocSummary.aspx/GetSummaryByProgramCount", contentType: "application/json; charset=utf-8", data: kendo.stringify({ vendorId: supplierId, businessUnit: busUnit, productSegmentId: prodSegmentId, programId: progId, productManagerId: prodManagerId, companyIds: compIds, expired: exp.toString(), requestType: ''TotalCount'' }), success: function (msg) { // alert(''in success of getcount''); }, error: function (XMLHttpRequest, textStatus, errorThrown) { // alert(''in failure of getcount''); } });

Cuando intento recuperar el objeto de solicitud, los datos publicados no se muestran. El código de mi página aspx es el siguiente. Estoy enviando cada uno de los datos publicados en formato Json a la página, pero no aparece en el código de la página siguiente. ¿Hay algún ajuste adicional en la llamada jQuery ajax que me estoy perdiendo?

protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "application/json"; string requestType = Request.Params["requestType"]; //populate variables from posted data string vendorId = Request.Params["vendorId"]; string businessUnit = Request.Params["businessUnit"]; string productSegmentId = Request.Params["productSegmentId"]; string commitmentProgramId = Request.Params["programId"]; string productManagerId = Request.Params["productManagerId"]; string companyIds = Request.Params["companyIds"]; string expired = Request.Params["expired"]; }

ACTUALIZACIÓN 1: La respuesta de Stephen es el mejor enfoque para esto, especialmente el enfoque que hace ProcessRequest. Sin embargo, encontré un pequeño truco que permitirá que los datos se publiquen en ASP.Net de la manera tradicional habitual, es decir, como Solicitud ["ID de proveedor"], etc. Para habilitar la publicación de datos de cualquier solicitud de jQuery ajax, simplemente debe asegúrese de que se apliquen los siguientes 2 puntos a su llamada jQuery ajax:

  1. El tipo de contenido se debe dejar fuera de su llamada jQuery ajax O si desea incluirlo, no debe configurarse en "application / json; charset = utf-8" sino en "application / x-www-form-urlencoded ; conjunto de caracteres = UTF-8 ". El tipo de contenido, según mi entendimiento, indica a la página ASP.Net el tipo de datos que se envían y no el tipo de datos que se espera de la página.
  2. La parte de datos de jQuery ajax no debe tener los nombres de datos entre comillas . Entonces los datos: {"venorId": "AD231", "businessUnit": "123"} deben reemplazarse por los datos: {vendorId: "AD231", businessUnit: "123"}. En este ejemplo, los nombres de datos son vendorId y businessUnit, a los que se puede acceder en su código de ASP.Net usando la sintaxis habitual de ASP.Net como Request ["vendorId"] y Request ["businessUnit"].