Asp.Net MVC中使用StreamReader读取“Post body”之应用场景。

本文介绍了一种在MVC架构下根据不同市场(如Global、China、USA)对前端传来的JSON数据进行验证的方法。使用基类和个人信息控制器的具体实现,确保了不同市场的个性化验证需求得到满足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:有三个市场(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);
            }
}

 

转载于:https://www.cnblogs.com/kejie/articles/6253320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值