Enviar datos a un manejador genérico que acepta datos JSON usando C #

Tengo una situación en la que estoy accediendo a un manejador genérico ASP.NET para cargar datos usando JQuery. Pero dado que los datos cargados desde JavaScript no son visibles para los rastreadores del motor de búsqueda, decidí cargar datos desde C # y luego savelos en caching para JQuery. Mi controller contiene mucha lógica que no quiero volver a aplicar en el código. Aquí está mi código de Handler:

public void ProcessRequest(HttpContext context) { JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); string jsonString = string.Empty; context.Request.InputStream.Position = 0; using (var inputStream = new System.IO.StreamReader(context.Request.InputStream)) { jsonString = inputStream.ReadToEnd(); } ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString); context.Response.ContentType = "text/plain"; switch (contentType.typeOfContent) { case 1: context.Response.Write(getUserControlMarkup("SideContent", context, contentType.UCArgs)); break; } } 

Puedo llamar a la function getUserControlMarkup() desde C # pero tendré que aplicar algunas condiciones basadas en URL mientras lo llamo. El contentType.typeOfContent se basa realmente en los parameters de URL.

Si es posible enviar datos JSON a este controller, por favor dígame cómo hacerlo. Estoy tratando de acceder al controller de esta manera:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Common.host + "Handlers/SideContentLoader.ashx?typeOfContent=1&UCArgs=cdata"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Pero da el código NullReferenceException en Handler en la línea: ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);

No estoy seguro de por qué quieres hacerlo, pero para agregar un contenido a una request HTTP, usa:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Common.host + "Handlers/SideContentLoader.ashx?typeOfContent=1&UCArgs=cdata"); var requestStream = request.GetRequestStream(); using (var sw = new StreamWriter(requestStream)) { sw.Write(json); } 

Una buena forma de hacerlo es usar Enrutamiento. En el Global.asax

 protected void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } private void RegisterRoutes(RouteCollection routes) { routes.MapHttpHandlerRoute("MyRouteName", "Something/GetData/{par1}/{par2}/data.json", "~/MyHandler.ashx"); } 

Esto le indica a ASP.Net que llame a su controller en /Something/GetData/XXX/YYY/data.json .

Puede acceder a los parameters de ruta en el controller: context.Request.RequestContext.RouteData.Values["par1"] .

El rastreador analizará las URL siempre que se mencionen en alguna parte (es decir, files de robots o enlaces)

Tu problema es

  1. Cargue contenido en Div usando Javascript en ASP.NET usando C #.
  2. Visible para los motores de búsqueda

Mi opinión

  1. Cuando desee actualizar la página parcial, hay algún controller o service para comunicarse entre el server y el cliente. Puede usar Ajax para Solicitar al server.

si usa jquery puede probar esta function jQuery.ajax(); ejemplo:

  $.ajax({ url:"/webserver.aspx", data:{id:1}, type:'POST', success: function(data) { //do it success function } }) ; 

El siguiente paso es Generar service web en el código detrás de su ASP.NET que debe tener como formatting JSON o XML, cualquiera que sea su uso, asegúrese de que puede analizar fácilmente en la function de éxito de jQuery.ajax();

Aquí algunos Referencia para Generar Servicio Web en ASP.NET

  • Generar service web JSON ASP.NET

  • Parse Json en Code Behind Parse Código JSON detrás

  • Genere JSON RESULT y analice utilizando el lado del cliente Javascript Web Services ASP.NET Json

2. Visible para el motor de búsqueda en realidad

Creo que si permites que Search Engine indexe tu página, no hay problema, incluso si tienes algún código Ajax, el motor de búsqueda indexará tu página.

Encontré este artículo, creo que esto te ayudará. http://www.overpie.com/aspnet/articles/csharp-post-json-to-generic-handler