Aishwarya Shiva
Aishwarya Shiva

Reputation: 3406

Send data to a generic handler that accepts JSON data using C#

I have a situation where I am accessing an ASP.NET Generic Handler to load data using JQuery. But since data loaded from JavaScript is not visible to the search engine crawlers, I decided to load data from C# and then cache it for JQuery. My handler contains a lot of logic that I don't want to apply again on code behind. Here is my Handler code:

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;
            }
        }

I can call the function getUserControlMarkup() from C# but I will have to apply some URL based conditions while calling it. The contentType.typeOfContent is actually based on URL parameters.

If possible to send JSON data to this handler then please tell me how to do that. I am trying to access the handler like this:

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

But its giving NullReferenceException in Handler code at line: ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);

Upvotes: 8

Views: 5922

Answers (3)

Stefano Altieri
Stefano Altieri

Reputation: 4628

Not sure why you want to do it, but to add a content to an HTTP request use:

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);
        }

Upvotes: 2

Stefano Altieri
Stefano Altieri

Reputation: 4628

A nice way of doing it is to use Routing. In the 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");
}

This is telling ASP.Net to call your handler on /Something/GetData/XXX/YYY/data.json.

You can can access Route Parameters in the handler: context.Request.RequestContext.RouteData.Values["par1"].

The crawler will parse URLs as long as they are referenced somewhere (i.e. robots file or links)

Upvotes: 6

viyancs
viyancs

Reputation: 2339

Your Problem is

  1. Load Content into Div using Javascript in ASP.NET using C#.
  2. Visible to Search Engines

My Opinion

  1. When You want Update Partial Page there are some handler or service to communicate between server and client You can Using Ajax for Request to server.

if you use jquery you can try this function jQuery.ajax(); example:

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

Next Step is Generate Web Service in Code behind Your ASP.NET that should be result as JSON or XML format, whatever you use make sure you can parse easily in success function of jQuery.ajax();

Here some Reference for Generate Web Service on ASP.NET

2.Visible to Search Engine actually

I think if You allow Search engine to Index your page it's no problem , Even if You have some Ajax Code , Search engine will be indexing your page.

Upvotes: 2

Related Questions