将数据发送到使用C#接受JSON数据的通用处理程序

时间:2014-04-18 15:57:24

标签: c# javascript jquery asp.net json

我遇到的情况是我访问ASP.NET Generic Handler以使用JQuery加载数据。但是,由于从JavaScript加载的数据对搜索引擎抓取工具不可见,我决定从C#加载数据,然后将其缓存为JQuery。我的处理程序包含很多逻辑,我不想再在后面的代码上应用。这是我的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;
            }
        }

我可以从C#调用函数getUserControlMarkup(),但我必须在调用它时应用一些基于URL的条件。 contentType.typeOfContent实际上是基于网址参数。

如果可以将JSON数据发送到此处理程序,请告诉我该怎么做。我试图像这样访问处理程序:

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

但它在Handler代码中给出NullReferenceException行: ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);

4 个答案:

答案 0 :(得分:6)

一种很好的方法是使用路由。 在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");
}

这告诉ASP.Net在/Something/GetData/XXX/YYY/data.json上调用您的处理程序。

您可以在处理程序中访问路径参数: context.Request.RequestContext.RouteData.Values["par1"]

只要在某处引用了网址(即机器人文件或链接),抓取工具就会解析网址

答案 1 :(得分:2)

你的问题是

  1. 使用C#在ASP.NET中使用Javascript将内容加载到Div中。
  2. 可见搜索引擎
  3. 我的意见

    1. 当您需要更新部分页面时,有一些处理程序或服务可以在服务器和客户端之间进行通信您可以使用Ajax for request to server。
    2. 如果您使用jquery,可以尝试此函数jQuery.ajax();示例:

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

      下一步是在ASP.NET后面的代码中生成Web服务,应该以JSON或XML格式生成,无论您使用什么,请确保您可以在jQuery.ajax();

      的成功函数中轻松解析

      这里有一些关于在ASP.NET上生成Web服务的参考

      2.实际上是搜索引擎可见的

      我认为如果您允许搜索引擎为您的网页编制索引就没问题,即使您有一些Ajax代码,搜索引擎也会将您的网页编入索引。

答案 2 :(得分:2)

不确定为什么要这样做,但要使用以下内容向HTTP请求添加内容:

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

答案 3 :(得分:1)

我发现这篇文章,我相信这会对你有所帮助。 http://www.overpie.com/aspnet/articles/csharp-post-json-to-generic-handler