博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 ASP.NET 一般处理程序或 WebService 返回 JSON
阅读量:6690 次
发布时间:2019-06-25

本文共 3499 字,大约阅读时间需要 11 分钟。

今天, 将为大家说明如何在 ASP.NET 中使用一般处理程序或者 WebService 向 javascript 返回 JSON.

示例代码下载:
本文中所包含的内容如下:
  * 准备
  * 一般处理程序/ashx
  * WebService/asmx
准备
如果希望通过 ashx 或者 asmx 来返回 JSON, 那么需要引用程序集 System.Web.Extensions.dll, 在 .NET 3.5, 4.0 中已经默认包含. 对于 .NET 2.0, 3.0, 需要安装 ASP.NET 2.0 AJAX, 可以在 下载.
一般处理程序/ashx
使用一般处理程序返回 JSON, 对于不同版本的 .NET 都是类似, 请看下面的 handler.ashx 的代码:
<%@ WebHandler Language="C#" class="handler" %>

using System;

using System.Web;
using System.Web.Script.Serialization;
using System.Collections.Generic;

public class handler : IHttpHandler

{

    public void ProcessRequest(HttpContext context)

    {
        context.Response.ContentType = "text/javascript";
        context.Response.Cache.SetNoStore ( );

        string name = context.Request["name"];

        SortedDictionary<string, object> values = new SortedDictionary<string, object>();

        values.Add("message",
            string.IsNullOrEmpty(name) ? "无名氏" :
            string.Format("你好 {0}, {1}", name, DateTime.Now));

        context.Response.Write(new JavaScriptSerializer().Serialize(values));

    }

    public bool IsReusable

    {
        get { return false; }
    }

}

上面的例子中, 通过 JavaScriptSerializer 类的 Serialize 方法, 将对象转化为 JSON 对应的字符串. 而转化的对象是 SortedDictionary, 会生成 { "message": "你好 x, 20xx-xx-xx xx:xx:xx" } 这样类似的字符串. 如果需要返回数组, 可以定义 object[] 来转换. 代码中还使用了 context.Response.Cache.SetNoStore ( ); 来让浏览器每次请求 ashx 时都重新访问, 而不是使用缓存.
如果使用 jQuery, 可以使用下面的函数来接收 JSON:
function(data){
    alert(data.message);
}
WebService/asmx
在不同版本的 .NET 中, 通过 javascript 访问 WebService 并返回 JSON 是略有不同的. 首先, 可以分别采用不同的 Web.config 文件.法全部列出, 如有需要请参考:
.NET 2.0, 3.0 Web.config
<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true">
            <assemblies>
                <add
assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </assemblies>
        </compilation>
        <pages/>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx"
                type="System.Web.Script.Services.ScriptHandlerFactory"
                 validate="false"/>
        </httpHandlers>
    </system.web>
</configuration>
.NET 3.5 Web.config
.NET 4.0 Web.config
以上两个版本的 Web.config 可以在示例压缩包中的 Web.3.5.config 和 Web.4.config 中查看.
下面是 webservice.asmx/webservice.cs 的代码:
<%@ WebService Language="C#" CodeBehind="~/App_Code/webservice.cs" class="webservice" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
using System.Web.Script.Serialization;
using System.Collections.Generic;

[WebService ( Namespace = "" )]

[WebServiceBinding ( ConformsTo = WsiProfiles.BasicProfile1_1 )]
[ScriptService]
public class webservice : System.Web.Services.WebService
{

    [WebMethod]

    [ScriptMethod]
    public SortedDictionary<string, object> Save ( string name )
    {
        this.Context.Response.Cache.SetNoStore ( );

        SortedDictionary<string, object> values = new SortedDictionary<string, object> ( );

        values.Add ( "message",
            string.IsNullOrEmpty ( name ) ? "无名氏" :
            string.Format ( "你好 {0}, {1}", name, DateTime.Now ) );

        return values;

    }

}

为类添加属性 ScriptService, 并对类中的方法使用属性 ScriptMethod, 可以让 javascript 来调用这些方法. 这里不需要再使用 JavaScriptSerializer 将对象转化为 JSON 字符串, 而是直接返回对象即可. 上面的代码中返回了 SortedDictionary, 在 .NET 2.0, 3.0 中将类似于 { "message": "你好 x, 20xx-xx-xx xx:xx:xx" } 的形式, 而对于 .NET 3.5, 4.0 则是 { "d": { "message": "你好 x, 20xx-xx-xx xx:xx:xx" } }, 因此可以分别在 jQuery 中使用下面的函数来接受 JSON:
function(data){
    alert(data.message);
}

function(data){

    alert(data.d.message);
}
JQueryElement 是开源共享的代码, 可以在 页面下载 dll 或者是源代码.
实际过程演示: , 建议全屏观看.
欢迎访问 panzer 开源项目, , 其中包含了 IEBrowser 控制 WebBrowser 执行各种 js 和 jQuery 脚本以及录制功能 和 jQueryUI 的 Asp.net 控件 JQueryElement, 微博:

转载地址:http://iakoo.baihongyu.com/

你可能感兴趣的文章
阿里云对象存储OSS支持版本管理特性
查看>>
用python 访问redis的几种常用方式
查看>>
我的友情链接
查看>>
Linux Shell 基本概念及编程(5)
查看>>
RDBMS DBMS MS DB
查看>>
我的友情链接
查看>>
svn 实践
查看>>
在 PowerShell 中使用 SQL Server (3)
查看>>
我的友情链接
查看>>
CSS元素定位
查看>>
质量时代——“Jolt大奖精选丛书”有奖征文
查看>>
Python list方法总结
查看>>
DNS服务器维护命令
查看>>
六、用户与权限
查看>>
面向机器学习数据平台的设计与搭建
查看>>
centos6.7 编译安装mysql-5.6.27
查看>>
spring cloud 整合zpkin问题
查看>>
Maven下载慢的解决方案
查看>>
我的友情链接
查看>>
Android 核心分析 之七------Service深入分析
查看>>