场景:有三个市场(Global、China、USA),对前台传过来的数据有些验证需要细化到每个市场去完成。

所以就出现了基类(Global)和派生类(China、USA)

定义基类(Global)PersonalInformationController

  public abstract class PersonalInformationController : BaseController
     {
         #region Abstract/Virtual Methods
         //定义一个抽象方法
         public abstract JsonResult ValidatePersonalInfo(string personJsonString);

         #endregion
   [HttpPost]
         public JsonResult Validate()
         {
             //这里就是不急着反序列化到具体实体中,纯粹获取json数据。
             string myJson = string.Empty;
             using (System.IO.StreamReader sr = new System.IO.StreamReader(Request.InputStream))
             {
                 myJson = sr.ReadToEnd();
             }

             Agreement agreement = null;
             JsonResult jsResult = ValidatePersonalInfo(myJson);
             if (jsResult != null)
             {

                 return jsResult;
             }
 }

现在需要将China前台传过来的数据进行验证,其实mvc中自己实现了反序列化"Post Body",诸如:

         [HttpPost]
         public JsonResult Validate(TestModel model)
         {
 ///...............
 }

定义一个具体的实体去接收数据。那问题来了,Global中用具体的实体接收这个数据,但是不同的市场的数据是不一样的,所以这里就轮到StreamReader上场了,将json数据读取出来不急着反序列化。而是将json数据通过抽象方法传递到China的后台验证中,让它反序列化到对应的实体中。

 //China市场的后台验证 

 public class PersonalInformationController : Global.Controllers.PersonalInformationController
     {
    //重写基类中function并实现.
  public override JsonResult ValidatePersonalInfo(string personJsonString)
         {
             agreement = null;
             PersonalInformationViewModel personViewModel = JsonSerializer.DeserializeFromString<PersonalInformationViewModel>(personJsonString);

             ValidationResult validate = new PersonalInformationValidator().Validate(personViewModel);
             if (!validate.IsValid)
             {
                 var errs = validate.Errors.Select(x => x.ErrorMessage);
                 return Json(new { MessageType = "ValidateError", Content = errs }, JsonRequestBehavior.AllowGet);
             }
 }

Asp.Net MVC中使用StreamReader读取“Post body”之应用场景。的更多相关文章

  1. ASP.NET MVC中分析淘宝网页发生乱码标题搞定方法

    ASP.NET MVC中分析淘宝网页发生乱码标题搞定方法 近来正在分析淘宝中商品的信息,效果发生乱码,如: 原因便是中文字符格式发生冲突,ASP.NET MVC 默认采用utf-8,可是淘宝网页采用g ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  3. Asp.net MVC中 Controller 与 View之间的数据传递

    在ASP.NET MVC中,经常会在Controller与View之间传递数据 1.Controller向View中传递数据 (1)使用ViewData["user"] (2)使用 ...

  4. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

  5. 在ASP.NET MVC中实现基于URL的权限控制

    本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...

  6. NPOI以及在ASP.NET MVC中的使用

    NPOI以及在ASP.NET MVC中的使用 1.前言 相信大家在工作中经常要遇到一些导入导出Execl操作.学习贵在分享,分享使人快乐,园子里的前辈已经有很多好的文章,鄙人也是能力有限,在这里把这些 ...

  7. ASP.NET MVC + EF 利用存储过程读取大数据

    ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...

  8. ASP.NET MVC中使用Ninject

    ASP.NET MVC中使用Ninject 在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事 ...

  9. Asp.Net MVC 中的 Cookie(译)

    Asp.Net MVC 中的 Cookie(译) Cookie Cookie是请求服务器或访问Web页面时携带的一个小的文本信息. Cookie为Web应用程序中提供了一种存储特定用户信息的方法.Co ...

随机推荐

  1. ASP.NET常见面试题及答案(130题)

    1.C#中 property 与 attribute(抽像类)的区别,他们各有什么用处,这种机制的好处在哪里?答:property和attribute汉语都称之为属性.不过property是指类向外提 ...

  2. 每天一个linux命令---netstat

    中间件访问第三方服务,经常出现连不上的情况.可以增加监控,当出现异常的时候触发一些动作通知程序员 例如:  要在app 部署的主机上,应该登录 172.16.210.52 后运行  netstat - ...

  3. html基本标签结构

    简单的html5的基本架构 HTML全称为HyperText Markup Language,一款写给浏览器的语言. HyperText:超文本(文本,图片,视频,音频,链接) Markup Lanu ...

  4. WPF自定义RoutedEvent事件示例代码

    ************************* 引用网友,便于查找所用..... 创建自定义路由事件和应用分为6个步骤: (1)自定义路由事件参数对象 (2)声明并注册路由事件 (3)为路由事件添 ...

  5. 做 fzu oj 1106 题目学到的

    题目如下 这道题的意识就是给一个数问是否可以又阶乘之和构成,而难点主要是在于如果是7的话就是1!+3!,并不是单纯的从1的阶乘开始加,而是没顺序的,所以这题就得用到递归. (大概就是函数自己调用函数自 ...

  6. 自定义清除重复uses-permission申明的AS插件

    分享一个我刚到天下布医工作时,写的一个android studio插件. 做安卓项目时,经常继承一些第三方sdk,这些sdk都会申请权限,导致AndroidManifest.xml中的uses-per ...

  7. html5 -----audio标签

    在现在的公司上班需要做一个html5页面,上下可以滑动的,在页面上需要音乐,默认开始音乐播放,点击音乐标签后音乐停止.后来在项目开发中,遇到性能优化的问题,所以我建议大家以后在使用时不要直接在页面中使 ...

  8. python安装图文教程---超详细。。。不过是转的,但有改动

    如果你已安装好python,想安装第三方模块,方法详见如下地址: python安装第三方模块教程----marsggbo 1.想要安装Python,首先当然是去Python的官方网站(www.pyth ...

  9. 2018.3.28html学习笔记

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  10. 基于Odoo框架的开源在线客服系统

    cs_base 开源客服系统,基于 Odoo 的客服模块 cs_base 是在强大的 Odoo 框架的基础上实现的一个在线客服应用 基础模块包含完整的 Web 在线客服的接入,坐席管理等,通过扩展可方 ...