/// <summary>

/// 正则验证身份证号是否合法

/// </summary>

/// <param name="sIdCard"></param>

/// <returns></returns>

public bool CheckIDCard(string sIdCard)

{

return Regex.IsMatch(sIdCard, @"(^\d{17}(?:\d|x)$)|(^\d{15}$)");

}

Response.ContentEncoding = Encoding.GetEncoding("GB2312");

项目中有两个网中,其中WebService是接口:

题目是:

接口名称

心跳(附近)

url

http://202.102.90.169:8081/sys.asmx/HeartBeat?im=A000022DAC8C@&ln=xxxx&la=xxxxx&p=江苏省&c=南京市&d=建邺区

参数

参数1: im,设备的imei

参数2: ln,用户当前经度

参数3: la,用户当前纬度

参数4: p, 省(province)

参数5: c,市(city)

参数6: d 区(district)

返回值

{“r”:”0”,”msg”:”成功,无需下发信息”}

{“r”:”1”,”msg”:”成功,有新任务待接收”}

{“r”:”2”,”msg”:”请求参数错误”}

()字符串的json格式

备注

这个题目的目的就是,将这几个参数获取过来,对应的1.更新B_VS_Curpos服务车当前位置表;2.向B_VEH_TRACK服务车轨迹表中添加记录3.从T_TASK_INFO表中获取此imei的车是否有新任务此处同时满足TI_STATUS  N      NUMBER(2)         Y                          "任务状态(1:待下发;2:下发到服务站;3:下发到服务人员;4:拒绝任务;

5:任务开始;6:到达目的地;7:维修开始;8:配件申请;9:配件申请已审核;

10:配件申请已驳回;11:维修完成;12:任务完成;13:强制结束)"及TI_STATUS=3

解题方法:

在WebServiceController中添加Json方法

地址的写法是

http://localhost:3361/WebService/HeartBeat?im=VS_IMEI1&ln=10&la=10&p=jiangsu&c=nanjing&d=jiangning

其中WebService表示的是WebServiceController

HeartBeat表示的是WebServiceController内的JsonResult HeartBeat方法

地址上的im ln la等参数,直接在方法的参数上写HeartBeat(string im, string ln, string la, string p, string c, string d)获取过来

如果要求返回的是  这个样子  {"r":"","msg":"","info":[{"n":"li"}]}

说明:info的那部分后面其实是一个数组

return Json(new

{

r = r,

msg = msg,

info = new object[] {

new { n = "li" }

}

}, JsonRequestBehavior.AllowGet);

返回{“r”:”0”,”msg”:”成功,无需下发信息”}

去掉数组即可

return Json(new

{

r = r,

msg = msg

}, JsonRequestBehavior.AllowGet);

/// <summary>

/// 心跳

/// </summary>

/// <param name="im">设备的imei</param>

/// <param name="ln">用户的当前经度</param>

/// <param name="la">用户的当前纬度</param>

/// <param name="p">省(province)</param>

/// <param name="c">市(city)</param>

/// <param name="d">区(district)</param>

/// <returns></returns>

public JsonResult HeartBeat(string im, string ln, string la, string p, string c, string d)

{

int r = 0; string msg = "";

if (im == "" || ln == "" || la == "" || p == "" || c == "" || d == "" || im == null || ln == null || la == null || p == null || c == null || d == null)

{ r = 2; msg = "请求参数错误"; }

else

{

DbAccessOracle DbAccessor = new DbAccessOracle();

//如果b_vs_curpos 中服务车当前位置信息 没有此imei值的数据 返回请求参数错误

string sql =string.Format(@"select count (vs_imei) from b_vs_curpos where vs_imei='{0}'",im);

int imeicount=Convert.ToInt32(DbAccessor.GetScalar(sql));

if (imeicount <= 0)

{

r = 2; msg = "请求参数错误";

}

else

{

try

{

//事务处理 更新和插入的功能

ArrayList al = new ArrayList();

//更新B_VS_CurPos中服务车当前位置信息

string mySql01 = string.Format(@"update b_vs_curpos set vc_long={0},vc_lat={1},vc_long_encrypt={0},vc_lat_encrypt={1},province='{2}',city='{3}',area='{4}' where vs_imei='{5}'", ln, la, p, c, d, im);

//插入B_VEH_TRACK 服务车轨迹表   服务车当前位置信息

string mySql02 = string.Format(@"insert into b_veh_track(vt_id,vs_imei,vt_long,vt_lat,vt_long_encrypt,vt_lat_encrypt,vt_province,vt_city,vt_area,vt_sysdate) values(to_number(to_char(sysdate,'yyyymmddhhmiss')),'{0}',{1},{2},{1},{2},'{3}','{4}','{5}',sysdate)", im, ln, la, p, c, d);

//string mySql03 = string.Format("select count(TI_TASK_ID) from T_Task_Info where VS_IMEI='{1}' and TI_STATUS=3", im);

al.Add(mySql01);

al.Add(mySql02);

//al.Add(mySql03);

bool istrue= DbAccessor.ExecuteSql(al);//此处是项目中自己封装的执行多条sql语句的事务方法

if (istrue)

{

// 查询有无新任务

string sqlTask = string.Format("select count(TI_TASK_ID) from T_Task_Info where VS_IMEI='{0}' and TI_STATUS=3", im);

int taskcount = Convert.ToInt32(DbAccessor.GetScalar(sqlTask));

if (taskcount > 0) { r = 1; msg = "成功,有新任务待接收"; }

else { r = 0; msg = "成功,无需下发信息"; }

}

else { r = 2; msg = "请求参数错误"; }

}

catch { r = 2; msg = "请求参数错误"; }

}

////更新B_VS_CurPos中服务车当前位置信息

//BVsCurpos bc = new BVsCurpos();

//int result = bc.updateVSCurposLocation(im, Convert.ToDouble(ln), Convert.ToDouble(la), p, c, d);

//if (result <= 0) { r = 2; msg = "请求参数错误"; }

//else

//{

//    //插入B_VEH_TRACK 服务车轨迹表   服务车当前位置信息

//    string mySql = string.Format(@"insert into b_veh_track(vs_imei,vt_long,vt_lat,vt_long_encrypt,vt_lat_encrypt,vt_province,vt_city,vt_area,vt_sysdate) values('{0}',{1},{2},{1},{2},'{3}','{4}','{5}',{6});", im, ln, la, p, c, d, DateTime.Now);

//    DbAccessOracle DbAccessor = new DbAccessOracle();

//    DbAccessor.ExecuteSql(mySql);

//    //查询有无新任务

//    string sql = string.Format("select count(TI_TASK_ID) from T_Task_Info where VS_IMEI='{1}' and TI_STATUS=3", im);

//    int taskcount = Convert.ToInt32(DbAccessor.GetScalar(sql));

//    if (taskcount > 0) { r = 1; msg = "成功,有新任务待接收"; }

//    else { r = 0; msg = "成功,无需下发信息"; }

//}

}

return Json(new { r = r, msg = msg }, JsonRequestBehavior.AllowGet);

}

JsonRequestBehavior.AllowGet

表示允许使用get方式获取地址参数等信息

/// <summary>

/// 执行多条SQL语句,返回执行是否成功

/// </summary>

/// <param name="sqls"></param>

/// <returns></returns>

public bool ExecuteSql(ArrayList sqls)

{

bool success = true;

Open();

OracleCommand cmd = new OracleCommand();

OracleTransaction trans = oracleConnection.BeginTransaction();

cmd.Connection = oracleConnection;

cmd.Transaction = trans;

try

{

foreach (string str in sqls)

{

cmd.CommandText = str;

cmd.ExecuteNonQuery();

}

trans.Commit();

}

catch (Exception ex)

{

success = false;

trans.Rollback();

}

finally

{

Close();

Dispose();

}

return success;

}

程序编好后:

在地址栏输入地址及参数,回车,出现此弹出窗口

此内容保存起来:

其返回的内容就是题目所要求的格式内容

/// <summary>

/// 用户登录

/// </summary>

/// <param name="im"></param>

/// <param name="un">用户名</param>

/// <param name="pwd">用户密码</param>

/// <returns></returns>

public JsonResult UserLogin(string im, string un, string pwd)

{

string r = "", msg = "", realname = "";

bool istrue = false;

//判断imei号在手持终端(服务车)表(B_VEH_SERVICE)中是否存在  不存在 设备未注册

if (ExistIMEI(im))

{

//判断用户名和密码是否匹配

string sql = string.Format("select SS_REALNAME from b_service_staff where ss_name='{0}' and SS_PWD='{1}'", un, pwd);

//count(ss_name)

try

{

realname = Convert.ToString(DAO.GetScalar(sql));

r = "0"; msg = "登录成功"; istrue = true;

}

catch { r = "2"; msg = "登录失败,用户名或密码错误"; }

}

else { r = "1"; msg = "该设备未注册"; }

object result = null;

if (istrue)

{

result = new

{

r = r,

msg = msg,

info = new object[] {

new { n = realname }

}

};

}

else

{

result = new

{

r = r,

msg = msg

};

}

return Json(result, JsonRequestBehavior.AllowGet);

}

以上,通过黄色的部分与以下普通的

return Json(new { r = r, msg = msg }, JsonRequestBehavior.AllowGet);

相比

可以看出返回的Json 都是object  其中{}内部的内容可以直接是普通的字符串,也可以是object数组等等

MVC4.0接口学习的更多相关文章

  1. 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  2. 跟我一起学习ASP.NET 4.5 MVC4.0(一)(转)

    由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最近想给团队成员做一个系统的解说,让大家都可以学习一下ASP. ...

  3. 跟我一起学习ASP.NET 4.5 MVC4.0(二)

    上一篇文章中(跟我一起学习ASP.NET 4.5 MVC4.0(一))我们基础的了解了一下ASP.NET MVC4.0的一些比较简单的改变,主要是想对于MVC3.0来说的.因为这一些列主要是要给ASP ...

  4. 跟我一起学习ASP.NET 4.5 MVC4.0(一)

    跟我一起学习ASP.NET 4.5 MVC4.0(一)   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...

  5. 跟我一起学习ASP.NET 4.5 MVC4.0(五)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  6. 跟我一起学习ASP.NET 4.5 MVC4.0 (转)

    跟我一起学习ASP.NET 4.5 MVC4.0(一)   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...

  7. 跟我一起学习ASP.NET 4.5 MVC4.0(六)(转)

    这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ...

  8. 跟我一起学习ASP.NET 4.5 MVC4.0(四)(转)

    前几个文章中介绍了一些关于MVC4.0的东东,今天我们来看一下登陆验证,也可以说是权限验证,即AuthorizeAttribute.这个可以使用在控制器Controller上,也可以使用在Action ...

  9. 跟我一起学习ASP.NET 4.5 MVC4.0(三)(转)

    今天我们继续ASP.NET 4.5 MVC 4.0,前两天熟悉了MVC4.0在VS11和win8下的更新,以及MVC中的基础语法和几个关键字的使用.了解了这些就可以对MVC进一步认识,相信很多人都对M ...

随机推荐

  1. 日志分析工具ELK(二)

    五.Logstash日志收集实践 在学习Logstash之前,我们需要先了解以下几个基本概念: logstash收集日志基本流程: input-->codec-->filter--> ...

  2. 在java 8 stream表达式中实现if/else逻辑

    目录 简介 传统写法 使用filter 总结 简介 在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢? 还记得我们在上一篇文章lambda最佳实践中提到,la ...

  3. 在Spring Boot中使用内存数据库

    文章目录 H2数据库 HSQLDB Apache Derby SQLite 在Spring Boot中使用内存数据库 所谓内存数据库就是可以在内存中运行的数据库,不需要将数据存储在文件系统中,但是相对 ...

  4. CentOS7编译安装NodeJS

    概述 在CentOS7下采用编译NodeJS二进制源码包的方式安装NodeJS 下载NodeJS安装包 你可以先下载NodeJS二进制源码安装包文件然后上传到CentOS系统,也可以通过wget命令直 ...

  5. 前端存储 (5) - service worker 离线存储

    service worker 离线存储 简介: 一般的网站 在我们无法访问的 时候 一般 回出现 如下 该网页无法访问 service worker 构建的网站不会出现这个错误,因为所有的 请求都是先 ...

  6. 3DMAX导出到Unity坐标轴转换问题

      这是我在3dmax中创建的1cm*1cm*1cm的立方体,右图为3dmax中的坐标系 当我们把这个立方体导入到unity中发现x轴意外的扭转了90度 为了解决这个问题,你需要对模型做出修正 1.选 ...

  7. Soldiers Sortie

    这部2006年上映的作品豆瓣评分9.3,时至今日仍然有人乐此不疲地讨论剧情和启发,我想称之为经典应该不算过分. 这部剧我至少完整看过3遍,随着阅历增加,对某些角色的体会也变得更深刻. 许三多 许三多是 ...

  8. Nmon 监控结果分析

    一:CPU信息 SYS_SUMM图表: 1.折线图中蓝线为cpu占有率变化情况:粉线为磁盘IO的变化情况: 2.下面表各种左边的位磁盘的总体数据,包括如下几个: Avg tps during an i ...

  9. maven的安装及环境变量配置

    1.下载maven 2.解压至该路径 3. 新建环境变量MAVEN_HOME , 值为maven包点开路径 环境变量配置: 4. 编辑环境变量Path,追加%MAVEN_HOME%\bin\ 5.一路 ...

  10. leetCode刷题 | 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...