C#实现RESTFUL接口三板斧

C#实现Web格式的API有很多种方法,包括:

1、直接用webform窗体实现,这是需要把窗体上的除了第一行的代码全删了,主要靠Page_load中写代码,利用webform提供的server、page、上下文等对象解释参数,和返回数据。

2、还有一种不是webform窗体,可以调用 *.ashx (一般处理程序),它和aspx一样都实现了IHttpHandler接口。

3、还可以使用在aspx.cs中中声明带有[WebMehtod]的public static 的方法。

4、另外,.net还提供了web service框架、web api框架,但都太麻烦,需要生成一堆辅助类,我虽然大致明白是什么意思,但用起来太繁琐。

 

我最后采用了第3种方法。生成一个webform窗体,作为总入口,[WebMehtod]声明的方法似乎只支持json格式数据、post请求,当用get方法式会调用page_load,这时正好可以把API说明都放在页面里。另外为了避免特殊字符,建议用json序列化方法,这样单引号双引号等特殊字符都不用你处理了。为了方便json序列化,就需要客户端和服务端共享一些类说明。当然,你也可以直接拼接字符串,但json格式字符串容易把人搞晕。

web方法声明形如:

[WebMethod(EnableSession = false)]
    public static string InsertColumn(string str参数1, string str参数2)
    {
        return “”;
    }

javascript调用形如:

$.ajax({
                           type: "POST",
                           contentType: "application/json",
                           url: "logview.aspx/InsertColumn",
                           data: "{\"intID\":" + intErrorMaxID + "}",
                           dataType: 'json',
                           success: function (result) {
                               if (result.d == "")
                                   return;
                               var obj = JSON.parse(result.d);                
                               var BugListJson = obj.T1;
                               .........
                               }
                           }
                       });

C#调用形如:

WebClient wc;
            wc = new WebClient();
            wc.Encoding = Encoding.GetEncoding("utf-8");
            wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
            wc.Headers.Set("Content-Type", "application/json");
            wc.Headers.Set("dataType", "json");
            strURL = strURL + "/InsertColumn";
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            SiteInfo li = new SiteInfo(strSiteConfig);

            string strData = serializer.Serialize(li);
            string strResult = wc.UploadString(new Uri(strURL), strData);
            Allresult varResult = serializer.Deserialize<Allresult>(strResult);
            string strInfo = varResult.d;
            Result re = serializer.Deserialize<Result>(strInfo);

用于JSon序列化的类形如:
    public class Allresult
    {
        public string d;//返回值总是存在d中
    }   
    /// <summary>
    /// 供序列化的对象
    /// </summary>
    public class SiteInfo
    {
        public SiteInfo(string _strSiteConfig)
        {
            strSiteConfig = _strSiteConfig;
        }
        public string strSiteConfig;
    }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值