【问题标题】:How do I server AJAX calls using JSON with Web Forms?如何使用带有 Web 表单的 JSON 来处理 AJAX 调用?
【发布时间】:2011-01-22 14:44:06
【问题描述】:

我知道 MVC 控制器非常擅长处理 JSON 格式的 AJAX 请求,但是是否有任何内置的 ASP.NET 功能可以用于来自普通旧 Web 表单站点的这些类型调用?

【问题讨论】:

    标签: asp.net ajax json asp.net-ajax


    【解决方案1】:

    在这种情况下,我首选的方法是使用通用 Web 处理程序 (.ashx) 和 JSON.net http://james.newtonking.com/json

    它简单、快速且轻便。

    一个简单的例子是:

    public void ProcessRequest(HttpContext context)
    {
            string jsonOutput = string.Empty;
            context.Response.ContentType = "application/json";
            using (var db = new MyDBContext())
            {
                var dbResult = db.myobject.select();
                jsonOutput = Newtonsoft.Json.JsonConvert.SerializeObject(dbResult);
            }
            context.Response.Write(jsonOutput); 
    }
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 理论上可以。但是在实际使用中,你可能会遇到locking-session的问题:web-form页面的每一个请求都默认与用户会话相关联,所以你只能一个一个地做ajax请求。它对您的项目可能重要也可能不重要
      • 您可以对大多数请求使用只读会话,对登录/注销使用读写。它可以防止锁定问题。 Web API 默认不启用会话。我必须从 Application_PostAuthorizeRequest 调用方法:HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly);
      • 我很担心,因为我们试图在旧版 ASP.NET Web 表单中包含 Web API 模块。 Web API 确实默认没有 session,但是当它与 Web Form 结合时,它确实有。我们甚至可以从 API 请求中读取会话信息。通常情况下这不是问题,直到我们有一些繁重的 API 调用
      • 我想我曾经尝试过一次只读方法,但这很难,因为 web 表单和 web api 之间的混合。也许我会再试一次
      【解决方案3】:

      如果您在服务器上安装了 .NET 3.5,则可以利用框架附带的 JSON serialization tools

      这使用DataContractJsonserializer 类。

      【讨论】:

        【解决方案4】:

        您可以使用内置的 ASP.NET AJAX。

        选项 1 - 使用网络服务(如果您希望功能可重复使用):

        • 使用 [ScriptService] 属性创建 Web 服务 (.asmx),
        • 向您的页面添加一个并将网络服务添加到其服务集合中,
        • 在您的页面中使用由 ScriptManager 生成的 JavaScript 代理。

        选项 2 - 使用页面方法(如果您希望在单个页面上使用该功能而不创建 Web 服务):

        • 在页面中定义静态方法,为它们添加 [WebMethod] 属性,
        • 添加一个带有 EnablePageMethods="true" 的 ScriptManager,
        • 使用 PageMethods 对象从 JavaScript 调用这些方法。

        在任何一种情况下,JSON 都将用于数据传输。

        这是一个广泛的tutorial 和一些代码示例。

        然而,ASP.NET AJAX 经常被指责为效率低下——例如,它生成的 JS 往往相当大。因此,如果您关心性能,则需要对其进行彻底的测试。

        你也可以看看这个帖子:.NET AJAX Calls to ASMX or ASPX or ASHX?

        【讨论】:

        • 页面方法是解决方案。
        【解决方案5】:

        使用通用网络处理程序。即 ashx。这些甚至比 MVC 动作还要快。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-10
          • 1970-01-01
          • 2010-09-29
          • 2017-12-24
          • 2012-07-06
          相关资源
          最近更新 更多