首页 > 解决方案 > ASP.NET - 以 JSON 格式发送响应 - 考虑到源代码,不可能收到响应

问题描述

我的基类定义了以下方法:

protected void RespondWithJson<T>(T graph)
{
    var response = HttpContext.Current.Response;
    ClearResponse();
    response.ContentType = "text/json";
    DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T));
    ds.WriteObject(response.OutputStream, graph);
    response.End();
    Sql_Disconnect();
}

该方法属于将响应 JSON 的所有页面,具体取决于 URL 中的查询参数。

当您考虑所涉及的源代码时,我从我的一个页面得到的响应毫无意义。

该页面用于为我们的挑选和包装操作单独提交挑选。RespondWithJson 是这些页面用来确定其响应的唯一方法。

picksubmission 页面做出的唯一响应是 PickSubmissionResult 类型

例如

RespondWithJson(new PickSubmissionResult() { message = "Some URL Parameters are missing from the call!" });

但是,我实际上从这个页面得到的响应是类型List<PickingRow>

完全在服务器上的不同页面将使用List<PickingRow>.

那么为什么在这个页面上调用另一个页面的方法呢?

标签: c#asp.netjsonhttpserialization

解决方案


解决了。

以前,我将“请求者”类设置为静态。我现在已将每个页面对此类的引用替换为对此类的自己的单个实例的引用(现在是动态类)

    protected Requestor requestor;

    protected override void Page_Load(object sender, EventArgs e)
    {
        requestor = new Requestor();
        requestor.SessionSet += Requestor_SessionSet;
    }

现在 Requestor_SessionSet 处理程序仅在最后访问的页面上调用,而不是域生命周期内的所有访问页面。

这里的教训:

静态实例不是请求/页面独有的,而是服务器范围的


推荐阅读