为Android Post请求数据提供JSON数据源 IIS服务器 ashx一般处理程序

最近有一个项目需要从自己的IIS服务器获取数据,显示在android项目中,从网上找了好多关于POST,GET的案例,都是讲解如何获取数据的,但是关于数据源,也就是服务器端如何提供数据介绍的很少,偶尔一篇文章给了我指引,但是具体那片文章忘记了,在这里做个笔记,也好让其他想完整开发项目的同学们有个参考。

Android从服务器不管是GET还是POST数据,都会牵扯到服务器给他提供数据,或者POST后服务器如何存储到数据库。具体不多说,现在开始记录具体步骤:

一、开启Visual Studio ,创建一个项目

 创建完项目后,需要用到Newtonsoft.Json.dll,下载地址:Json.NET - Newtonsoft

下载后将其添加到项目的引用中。注意:一定要注意文件的.net版本号,我的是.net 4.0,如果用.net 6.0则会报错。如下图:

 

 至此,项目基本配置完成了,接下来开始操作数据库,读写数据。

首先创建数据库操作类:OpenDataBase.cs

为了方便,把数据库所有操作都写在这一个类里了。

代码如下:

public class OpenDataBase
    {
        //为了方便,设为全局对象的sql语句  
        public static String connString = "Data Source=DESKTOP-HH2LRH8;initial catalog=CeShi;User ID =sa;password=sf";
       
        public static List<UserInfo> GetUsers()
        {
            List<UserInfo> list = new List<UserInfo>();
            using (SqlConnection con = new SqlConnection(OpenDataBase.connString))
            {
                //查询表中有多少条数据
                string cmdTxt = "select * from UserInfo";
                //创建执行数据库命令的对象
                using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
                {
                    //数据库连接最好是最晚打开,最早关闭
                    con.Open();
                    SqlDataAdapter sqladapter = new SqlDataAdapter(cmd);
                    DataTable ds = new DataTable();
                    sqladapter.Fill(ds);
                    //遍历DataTable,赋值到UserInfo列表中
                    foreach (DataRow dr in ds.Rows)
                    {
                        UserInfo ui = new UserInfo();
                        ui.Id = int.Parse(dr[0].ToString());
                        ui.UserName = dr[1].ToString().Trim();
                        ui.PassWord = dr[2].ToString().Trim();
                        list.Add(ui);
                    }
                    //执行完命令后立即关闭数据库连接,减少资源消耗
                    con.Close();
                }
            }
            return list;
        }

        public static int SaveUser(UserInfo ui)
        {
            int id = -1;  //初始化ID,在调用过程中,只要返回结果不是-1,就证明插入成功了。
            using (SqlConnection con = new SqlConnection(OpenDataBase.connString))
            {
                //向数据库中插入一条新数据,并返回新插入数据的ID号
                string cmdTxt = "insert into UserInfo (UserName,PassWord) values ('"+ui.UserName+"','"+ui.PassWord+"')" +
                                " SELECT IDENT_CURRENT('UserInfo')";
                //创建执行数据库命令的对象
                using (SqlCommand cmd = new SqlCommand(cmdTxt, con))
                {
                    //数据库连接最好是最晚打开,最早关闭
                    con.Open();
                    //执行返回结果集的第一行第一列的值,返回的类型是object,需要类型转换
                    id = Convert.ToInt32(cmd.ExecuteScalar());
                    //执行完命令后立即关闭数据库连接,减少资源消耗
                    con.Close();
                    //返回ID
                }
            }
            return id;
        }
    }

SQL Server数据库表结构如下:

 接下来就是要写一般处理程序了。

快捷键Ctrl+Shift+A,打开“创建新项目"对话框,选择C#——Web——一般处理程序,名称填写你要通过android 客户端调用的文件名称,此处便于记忆,文件名为GetUserInfo.ashx 

 然后 点击  添加按钮

 GetUserInfo.ashx代码如下:

/// <summary>
    /// GetUserInfo 的摘要说明
    /// </summary>
    public class GetUserInfo : IHttpHandler
    {
        //初始化UserInfo列表
        public static List<UserInfo> users;
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //对UserInfo列表进行赋值
            users = OpenDataBase.GetUsers();
            //将UserInfo列表转换成Json字符串
            string userString = JsonConvert.SerializeObject(users,new DataTableConverter());
            context.Response.Write(userString);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

同样方法编写一个SaveUserInfo.ashx的一般处理程序,代码如下:

 /// <summary>
    /// SaveUserInfo 的摘要说明
    /// </summary>
    public class SaveUserInfo : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //初始化UserInfo对象
            UserInfo ui = new UserInfo();
            ui.UserName = context.Request["UserName"];
            ui.PassWord = context.Request["PassWord"];
            //对UserInfo对象进行数据保存并返回值
            int id = OpenDataBase.SaveUser(ui);
            context.Response.Write(id); //id只要不是-1就证明数据插入成功,而且获得了新数据的ID号
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

用到的UserInfo对象代码如下:

public class UserInfo
    {
        public UserInfo() { }
        public int Id { get;set; }
        public string UserName { get; set; }
        public string PassWord { get; set; }
    }

至此,保存查询的基本功能就实现了,通过浏览器验证一下功能是否完善

按F5,进行调试,如果弹出以下界面,说明服务器配置不正确,在web.config中添加如下代码:


  <system.webServer>
    <directoryBrowse enabled="true"/>
  </system.webServer>

web.config全部代码如下:

<?xml version="1.0" encoding="utf-8"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.7.2" />
    <httpRuntime targetFramework="4.7.2" />
  </system.web>
  <system.webServer>
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

在浏览器中输入:https://localhost:44337/GetUserInfo.ashx如果得到如下界面,则说明返回数据成功。可以在Android 客户端中对Json数据进行解析。

 在浏览器中输入:https://localhost:44337/SaveUserInfo.ashx?UserName=测试用户&PassWord=测试密码

如果出现如下界面,则说明插入数据成功,并返回了新数据的ID号

 通过SqlServer数据库中的数据记录可以验证是否正确。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackiesky1206

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值