WebService和Asp.NetMVC接收到的参数对比

前言:这段时间一直在学习新东西,今天抽时间来记录一下。这两天碰到一个bug, 前端向WebService和Asp.Net MVC发送的请求数据一毛一样,两个后台处理出来的数据就是不一样。花了一天时间才搞定,好TM坑爹呀,原因就是WebService和Asp.Net MVC接收到的参数不同,下面会详细对比记录。
本文主要记录三个问题:
1.WebService和Asp.Net MVC接收到参数不一致的问题
2.Asp.Net MVC 取用(area)路由配置中和命名空间的问题
3. Newtonsoft.Json序列化和反序列化问题
一、 WebService和Asp.Net MVC接收到参数不一致的问题
首先我们回顾一下,当我们用ashx文件接收前段传过来的参数时,我们接收到的参数都是string类型,而后端方法参数不可能全部都用string,所以我们需要把string类型转为我们需要的类型,比如int bool double,这些都属于简单类型,转换很方便,但是如果我们需要的是一个T型list(也就是泛型列表),T代表任意简单类型或者自定义类型,这时转换就很麻烦了。然而幸运的是,WebService和Asp.Net MVC都可以吧接收到的参数进行转换,为我们省去了很多步骤。
首先来看后代代码
 C# Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// 
/// WebService
/// 
/// 

[WebMethod(Description =  "获取一些表的数据" )]
public   string  GetDataByPage( string  tbid, List conditions,  bool  onlyCanShow,  bool  hasKey,  int  size,  int  index,  string  SYS_ID)
{
    
return  _mAsmx.GetDataByPage(tbid, conditions, onlyCanShow, hasKey, size, index, SYS_ID);
}


/// 
/// MVC
/// 

public  ActionResult GetDataByPage( string  tbid, List conditions,  bool  onlyCanShow,  bool  hasKey,  int  size,  int  index,  string  SYS_ID)
{
    
object  dt = mi.GetDataByPage(tbid, conditions, onlyCanShow, hasKey, size, index, SYS_ID);
    
string  dobject =  new  SerializeJson<</span>object>(ResultType.succeed, "", dt).ToString();
    Dictionary<</span>objectobject> obj = new Dictionary<</span>objectobject>();
    obj.Add(
"d", dobject);
    
return Json(obj, JsonRequestBehavior.AllowGet);
}
然后我们再看看接收到的参数
WebService和Asp.NetMVC接收到的参数对比

WebService和Asp.NetMVC接收到的参数对比
 
图中函数的第二个参数ConditionClass是一个自定义类型,我们从前端传过来的都是空数组“[]”,然而WebService接收到空数组以后创建了一个空对象,而MVC却给了一个null值,就是这小小的不同,导致我们后端出来的结果不同。
解决办法是:判断一下是否为null,为null就自己new一个出来
if (conditions is null) conditions = new List();
二、 Asp.Net MVC 区域(area)路由配置中和命名空间的问题
从Asp.Net MVC4开始,支持采用区域,即一个大的MVC项目其中可以包含很多小的MVC,这样一来,每个小区域可以独立开发,分工明确又互相协同。但这样一来,每个区域都要进行路由配置,有时候会混淆,下面详细说明。
WebService和Asp.NetMVC接收到的参数对比
如图,我们有一个大的MVC项目,其中又分了很多区域MVC,比如我们的区域叫Thirdparty,那么配置这个区域的路由规则的文件就是ThirdAreaRegistration.cs。配置文件如下:
WebService和Asp.NetMVC接收到的参数对比
 
注意我们用红线框起来的,我们来看下他是什么
WebService和Asp.NetMVC接收到的参数对比
 
就是他的Controller的命名空间,记住这个对应关系,以后就不会错了。
三、 Newtonsoft.Json序列化和反序列化问题
关于 Newtonsoft.Json,他是一个dll文件,也就是引用文件,前端用到的数据通常是json格式,而这个文件就是后端用来把数据序列化城json的,这两天用这个文件进行了序列化和反序列化,发现了一个有趣的问题。看图
WebService和Asp.NetMVC接收到的参数对比
 
上面,我们通过调用GetDataByPage分页方法,得到了一个序列化后的值,为了知道这个值得原型是什么,我么又进行了一次反序列化,把反序列化的结果又进行了一次序列化,对比两次的序列化结果,竟然不一样,为了知道为什么,我们把两次得到的json分别进行了格式化
第一个json:
WebService和Asp.NetMVC接收到的参数对比
 
第二个json:
WebService和Asp.NetMVC接收到的参数对比
对比之后,发现了第二次其实是进行了二次序列化,记录一下,后面如果使用的话,需要注意。 解决办法就是不能直接把反序列化的结果sdjs进行序列化,而应该把sdjs.Result进行序列化,因为sdjs.Result才是我们最开始序列的对象。
好了,本次博文就分享到这里,路漫漫其修远兮,最近状态还是不好,现在备战软考,明年备注注册测绘师,加油。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AIGIS.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值