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

本文关键字:数据 JSON 处理 程序 使用 | 更新日期: 2023-09-27 17:58:52

我遇到了访问ASP的情况。NET通用处理程序使用JQuery加载数据。但由于从JavaScript加载的数据对搜索引擎爬网程序不可见,我决定从C#加载数据,然后将其缓存到JQuery。我的处理程序包含了很多逻辑,我不想在代码隐藏中再次应用这些逻辑。这是我的处理程序代码:

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实际上是基于URL参数的。

如果可以将JSON数据发送到这个处理程序,请告诉我如何做到这一点。我正试图访问这样的处理程序:

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

但它在第行的Handler代码中给出了NullReferenceExceptionContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);

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

一个很好的方法是使用路由。在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"]

只要URL在某个地方被引用(即robots文件或链接),爬网程序就会解析它们。

不确定为什么要这样做,但要向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);
        }

您的问题是

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

我的意见

  1. 当您想要更新部分页面时,有一些处理程序或服务可以在服务器和客户端之间进行通信。您可以使用Ajax请求服务器

如果你使用jquery,你可以尝试这个函数jQuery.ajax();例如:

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

下一步是在ASP后面的代码中生成Web服务。NET,应该是JSON或XML格式的结果,无论你使用什么,都要确保你可以在jQuery.ajax(); 的成功函数中轻松解析

本文对在ASP。净

  • 生成JSON Web服务ASP。净

  • 在代码背后解析Json在背后解析Json代码

  • 生成JSON RESULT并使用客户端Javascript Web Services ASP。NET Json

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

我认为如果你允许搜索引擎为你的页面建立索引,这是没有问题的,即使你有一些Ajax代码,搜索引擎也会为你的网页建立索引。