3.添加一个IHttpHandler,作为REST的数据源,他的输出符合Json规范,大概意思很简单,从传入的参数里面获取变量,然后查数据库取得datatable,最后经过json的序列化返回response。
Code
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingPixysoft.Framework.Noebe;
usingSystem.Collections.Generic;
///<summary>
///RESThandler的摘要说明
///</summary>
[Pixysoft.Framework.Security.Entity.SkipPage]
publicclassRESThandler:IHttpHandler
{
privateconstintDefaultCountNumber=6;
#regionIHttpHandler成员
publicboolIsReusable
{
get{returntrue;}
}
publicvoidProcessRequest(HttpContextcontext)
{
context.Response.Clear();
context.Response.ClearContent();
stringtype=context.Request.QueryString["type"];
stringcount=context.Request.QueryString["count"];
if(string.IsNullOrEmpty(type)||string.IsNullOrEmpty(type.Trim()))
{
context.Response.Write("");
return;
}
intcountNum;
if(!int.TryParse(count,outcountNum))
{
countNum=DefaultCountNumber;//defaultvalue
}
if(countNum<0||countNum>12)
countNum=DefaultCountNumber;
switch(type)
{
caseRestType.hotproduct:
{
INoebeCommandcommand=NoebeManager.Instance.NoebeCommand;
command.SQL="SELECTTOP"+countNum+"WEB_ITEMINFO.ITEMCODEASITEMCODE,WEB_ITEMINFO.ITEMNAMEASITEMNAME,WEB_ITEMINFO.PRICEASPRICE,WEB_ITEMIMG.THUMBPICURLASTHUMBPICURLFROMWEB_ITEMINFOINNERJOINWEB_ITEMIMGONWEB_ITEMINFO.ITEMCODE=WEB_ITEMIMG.ITEMCODEORDERBYWEB_ITEMINFO.CREATEDATE,WEB_ITEMINFO.MODIDATE";
DataTabletable=command.ExecuteReader();
List<HotProduct>list=newList<HotProduct>();
foreach(DataRowrowintable.Rows)
{
HotProductpro=newHotProduct();
pro.Imgurl=GetImageUrl(row["THUMBPICURL"].ToString());
pro.Price=double.Parse(row["PRICE"].ToString()).ToString(".00");
pro.Productname=Pixysoft.StringCoder.StringTrim(row["ITEMNAME"].ToString(),15);
pro.Url="common/item.aspx?itemcode="+row["ITEMCODE"].ToString();
list.Add(pro);
}
context.Response.Write(Pixysoft.Json.MyJson.Instance.Serialize(list));//我把Json.net封装了一下,实际上还是调用了他的javascript.serialize的方法
return;
break;
}
default:
{
context.Response.Write("");
return;
break;
}
}
}
#endregion
privatestringGetImageUrl(stringurl)
{
if(!url.StartsWith("http://"))
{
returnHttpContext.Current.Server.MapPath(url);
}
returnurl;
}
}
[Serializable]
publicclassHotProduct
{
stringimgurl;
stringurl;
stringproductname;
stringprice;
publicstringImgurl
{
get{returnimgurl;}
set{imgurl=value;}
}
publicstringUrl
{
get{returnurl;}
set{url=value;}
}
publicstringProductname
{
get{returnproductname;}
set{productname=value;}
}
publicstringPrice
{
get{returnprice;}
set{price=value;}
}
}
classRestType
{
publicconststringhotproduct="hotproduct";
}
4.在web.config里面注册这个handler
<add verb="GET" path="REST.do" type="RESThandler,App_Code"/>
因为我的handler在web项目里面写的,所以type的dll引用了App_Code
5.写一个REST_product_preload.js,目的是动态导入需要使用的ajax.js/json.js,当然还有自己定义的css
//写下一个mark,被ajax填充
this.server='http://localhost:3652/Pixysoft.Web.CitiBox';
document.write('<spanid="ajaxresponse"><pstyle="text-aligh:center;">Pleasewait</p></span>');
varusrdefaultcss=true;
if(typeofdefaultcss=='undefined')
{
usrdefaultcss=true;
}
else
{
usrdefaultcss=defaultcss;
}
if(usrdefaultcss)
LoadJsCssFile(this.server+'/App_Themes/REST/REST_product.css','css');
LoadJsCssFile(this.server+'/js/ajax/ajax.js','js');
LoadJsCssFile(this.server+'/js/json/json.js','js');
//动态加载css
functionOnloadCss(href)
{
document.createStyleSheet(href);
}
//http://homepage.yesky.com/45/7728545.shtml
functionLoadJsCssFile(filename,filetype)
{
if(filetype=="js")
{
//判断文件类型
varfileref=document.createElement('script')//创建标签
fileref.setAttribute("type","text/javascript")//定义属性type的值为text/javascript
fileref.setAttribute("src",filename)//文件的地址
}
elseif(filetype=="css")
{
//判断文件类型
varfileref=document.createElement("link")
fileref.setAttribute("rel","stylesheet")
fileref.setAttribute("type","text/css")
fileref.setAttribute("href",filename)
}
if(typeoffileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
6.写一个REST_product.js,这个就是调用ajax读取handler的json数据,并且显示到页面。(我就被一个ajax问题搞了很久,终于发现通过写<span>,然后替换里面的span.htmltext就可以实现动态加载数据)
//获得数据
req=CreateAjaxRequest();
try
{
req.onreadystatechange=handleStateChange;
req.open("GET",'REST.do?type=hotproduct&count='+productnumber,true);
req.send(null);
}
catch(exception)
{
alert("");
}
//取得数据,并且处理
functionhandleStateChange()
{
if(req.readyState==4)
{
if(req.status==200||req.status==0)
{
//取得返回字符串
varresp=req.responseText;
//构造返回JSON对象的方法
varjson=resp.parseJSON();
//构造返回结果
//显示返回结果
document.getElementById("ajaxresponse").innerHTML=GetProductResponse(json);
}
}
}
functionGetProductResponse(json)
{
varretvalue='';
retvalue+='<divclass="lstContent_product">';
retvalue+='<ul>';
for(i=0;i<json.length;i++)
{
retvalue+='<li>';
retvalue+='<pclass="product_img">';
retvalue+='<ahref="'+json[i].Url+'"title="'+json[i].Productname+'"target="_blank">';
retvalue+='<imgsrc='+json[i].Imgurl+'alt=""/>';
retvalue+='</a>';
retvalue+='</p>';
retvalue+='<pclass="product_name">';
retvalue+='<ahref="'+json[i].Url+'"title="'+json[i].Productname+'"target="_blank">'+json[i].Productname+'</a>';
retvalue+='</p>';
retvalue+='<pclass="product_retailprice">';
retvalue+='零售价¥'+json[i].Price+'';
retvalue+='</p>';
retvalue+='<pclass="product_lotprice">';
retvalue+='批发价:[登录问价]</p>';
retvalue+='</li>';
}
retvalue+='</ul>';
retvalue+='</div>';
returnretvalue;
}
7. 新建一个html页面,输入一下代码:
<html>
<head>
</head>
<body>
MyHotProduct!
<scriptlanguage="javascript">
productnumber=4;defaultcss=true;</script>
<scriptlanguage="javascript"type="text/javascript"src="js/REST/REST_product_preload.js">
</script>
<scriptlanguage="javascript"type="text/javascript"src="js/REST/REST_product.js">
</script>
</body>
</html>
后记:
本REST框架需要ajax、json背景知识,引用了json.js,json.net类库
本REST例子无法正常运行,紧紧作为一个思路。如果需要正常运行,还需要我们公司自己的框架。当然经过合理的修改是可以正常运行的。
优质内容筛选与推荐>>
1、win10解决vc++6.0不兼容问题方法2、Java实验报告(实验一)3、python函数之匿名函数4、Java WebService 简单实例[转载]5、[luoguP1033] 自由落体(模拟?)
长按二维码向我转账
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
阅读
好看
已推荐到看一看
你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
取消
分享想法到看一看
确定
最多200字,当前共字