我遇到的情况是我访问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);
答案 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)
你的问题是
我的意见
如果您使用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服务的参考
生成JSON Web Service ASP.NET
解析代码背后的Json Parse JSON Code Behind
使用客户端Javascript生成JSON RESULT和Parse Web Services ASP.NET Json
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