gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:09:06 30 4
gpt4 key购买 nike

我有一种情况,我正在访问 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;
}
}

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

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

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

但它给予 NullReferenceException在行的处理程序代码中: ContentType contentType = jsonSerializer.Deserialize<ContentType>(jsonString);

最佳答案

一个很好的方法是使用路由。在 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,只要它们在某处被引用(即机器人文件或链接)

关于c# - 使用 C# 将数据发送到接受 JSON 数据的通用处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23157685/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com