国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

使用ASP.NET一般處理程序或WebService返回JSON的實(shí)現(xiàn)代碼

2024-07-10 13:24:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

示例代碼下載:

本文中所包含的內(nèi)容如下:

  * 準(zhǔn)備
  * 一般處理程序/ashx
  * WebService/asmx準(zhǔn)備

如果希望通過(guò) ashx 或者 asmx 來(lái)返回 JSON, 那么需要引用程序集 System.Web.Extensions.dll, 在 .NET 3.5, 4.0 中已經(jīng)默認(rèn)包含. 對(duì)于 .NET 2.0, 3.0, 需要安裝 ASP.NET 2.0 AJAX, 可以在 ?displaylang=en&id=883 下載.

一般處理程序/ashx

使用一般處理程序返回 JSON, 對(duì)于不同版本的 .NET 都是類(lèi)似, 請(qǐng)看下面的 handler.ashx 的代碼:

復(fù)制代碼 代碼如下:


<%@ WebHandler Language="C#" %>
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) ? "無(wú)名氏" :
string.Format("你好 {0}, {1}", name, DateTime.Now));
context.Response.Write(new JavaScriptSerializer().Serialize(values));
}
public bool IsReusable
{
get { return false; }
}
}


上面的例子中, 通過(guò) JavaScriptSerializer 類(lèi)的 Serialize 方法, 將對(duì)象轉(zhuǎn)化為 JSON 對(duì)應(yīng)的字符串. 而轉(zhuǎn)化的對(duì)象是 SortedDictionary, 會(huì)生成 { "message": "你好 x, 20xx-xx-xx xx:xx:xx" } 這樣類(lèi)似的字符串. 如果需要返回?cái)?shù)組, 可以定義 object[] 來(lái)轉(zhuǎn)換. 代碼中還使用了 context.Response.Cache.SetNoStore ( ); 來(lái)讓瀏覽器每次請(qǐng)求 ashx 時(shí)都重新訪問(wèn), 而不是使用緩存.
如果使用 jQuery, 可以使用下面的函數(shù)來(lái)接收 JSON:

復(fù)制代碼 代碼如下:


function(data){
alert(data.message);
}


WebService/asmx
在不同版本的 .NET 中, 通過(guò) javascript 訪問(wèn) WebService 并返回 JSON 是略有不同的. 首先, 可以分別采用不同的 Web.config 文件.法全部列出, 如有需要請(qǐng)參考:
.NET 2.0, 3.0 Web.config

復(fù)制代碼 代碼如下:


<?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
以上兩個(gè)版本的 Web.config 可以在示例壓縮包中的 Web.3.5.config 和 Web.4.config 中查看.
下面是 webservice.asmx/webservice.cs 的代碼:

復(fù)制代碼 代碼如下:


<%@ WebService Language="C#" CodeBehind="~/App_Code/webservice.cs" %>
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 = "http://tempuri.org/" )]
[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 ) ? "無(wú)名氏" :
string.Format ( "你好 {0}, {1}", name, DateTime.Now ) );
return values;
}
}


為類(lèi)添加屬性 ScriptService, 并對(duì)類(lèi)中的方法使用屬性 ScriptMethod, 可以讓 javascript 來(lái)調(diào)用這些方法. 這里不需要再使用 JavaScriptSerializer 將對(duì)象轉(zhuǎn)化為 JSON 字符串, 而是直接返回對(duì)象即可. 上面的代碼中返回了 SortedDictionary, 在 .NET 2.0, 3.0 中將類(lèi)似于 { "message": "你好 x, 20xx-xx-xx xx:xx:xx" } 的形式, 而對(duì)于 .NET 3.5, 4.0 則是 { "d": { "message": "你好 x, 20xx-xx-xx xx:xx:xx" } }, 因此可以分別在 jQuery 中使用下面的函數(shù)來(lái)接受 JSON:

復(fù)制代碼 代碼如下:


function(data){
alert(data.message);
}
function(data){
alert(data.d.message);
}


JQueryElement 是開(kāi)源共享的代碼, 可以在 頁(yè)面下載 dll 或者是源代碼.

實(shí)際過(guò)程演示: , 建議全屏觀看.

歡迎訪問(wèn) panzer 開(kāi)源項(xiàng)目, , 其中包含了 IEBrowser 控制 WebBrowser 執(zhí)行各種 js 和 jQuery 腳本以及錄制功能 和 jQueryUI 的 Asp.net 控件 JQueryElement.

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄梅县| 敖汉旗| 西贡区| 榆中县| 垣曲县| 达州市| 蒲江县| 满城县| 叙永县| 泸定县| 延庆县| 辽宁省| 阳高县| 南京市| 扶风县| 佛学| 三原县| 沾化县| 肥城市| 绥芬河市| 商丘市| 古浪县| 孝义市| 韶山市| 庆安县| 永丰县| 文山县| 吴忠市| 隆子县| 且末县| 手机| 泽州县| 新平| 平陆县| 平原县| 甘泉县| 安多县| 宣威市| 商都县| 博白县| 宁陕县|