• 利用HttpWebRequest从ASP.NET MVC 向 ASP.NET MVC Core 中传递对象


    一 简介     

         HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有用的属性。这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利用new关键字通过构 造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的。另外,你可能预计需要显式地调用一个“Send”方法,实际上不需要。接下来调用 HttpWebRequest.GetResponse()方法返回的是一个HttpWebResponse对象。你可以把HTTP响应的数据流 (stream)绑定到一个StreamReader对象,然后就可以通过ReadToEnd()方法把整个HTTP响应作为一个字符串取回。也可以通过 StreamReader.ReadLine()方法逐行取回HTTP响应的内容。

    二 场景

       应公司项目需要,会员中心登录的用户,需要将登录用户信息 存储到MonogoDB中,由于 MongoDB 的相关操作已 集成到 ASP.NET Core MVC  服务中 ,在此场景中,需要将登录的用户信息,通过对象的方式 传递到服务器端,服务器端接收到传递的对象之后,利用ASP.NET Core自带的校验方式,完成实体验证.

    三 具体实现

     服务器端实现:

    1 创建接收实体对象:利用 Required 特性 标记该属性不能为空.

     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel.DataAnnotations;
     4 using System.Linq;
     5 using System.Threading.Tasks;
     6 
     7 namespace PageViewCollection.Models.Request
     8 {
     9     public class LoginRecordRequest
    10     {
    11         /// <summary>
    12         /// 会员ID
    13         /// </summary>
    14         [Required(ErrorMessage = "会员ID不能为空")]
    15         public int cust_id { get; set; }
    16 
    17         /// <summary>
    18         /// 会员类型
    19         /// </summary>
    20         [Required(ErrorMessage = "会员类型不能为空")]
    21         public string cust_kind { get; set; }
    22 
    23         /// <summary>
    24         /// 指纹
    25         /// </summary>
    26         [Required(ErrorMessage = "会员指纹不能为空")]
    27         public string finger { get; set; }
    28 
    29         /// <summary>
    30         /// 登录来源
    31         /// </summary>
    32         [Required(ErrorMessage = "登录来源不能为空")]
    33         public string LoginSource { get; set; }
    34     }
    35 }

    2 创建控制器,利用  ModelState.IsValid 完成实体参数验证

     1 using Microsoft.AspNetCore.Mvc;
     2 using PageViewCollection.BLL;
     3 using PageViewCollection.Entity;
     4 using PageViewCollection.Models;
     5 using PageViewCollection.Models.Request;
     6 using System;
     7 
     8 namespace PageViewCollection.Controllers
     9 {
    10     /// <summary>
    11     /// 用户登录数据记录接口
    12     /// </summary>
    13     public class LoginRecordsController : Controller
    14     {
    15         LoginRecordBLL RecordBLL = new LoginRecordBLL();
    16         [HttpPost,Route("LoginRecores/Index")]
    17         public IActionResult Index(LoginRecordRequest loginRecordRequest)
    18         {
    19             //验证实体
    20             if (!ModelState.IsValid)
    21             {
    22                 string result = string.Empty;
    23                 foreach (var item in ModelState.Values)
    24                 {
    25                     foreach (var error in item.Errors)
    26                     {
    27                         result += error.ErrorMessage + "|";
    28                     }
    29                 }
    30                 return Json(ResponseModel.Succeed(result));
    31             }
    32 
    33             //初始化数据
    34 
    35             LoginRecord loginRecord = new LoginRecord();
    36             loginRecord.cust_id = loginRecordRequest.cust_id;
    37             loginRecord.cust_kind = loginRecordRequest.cust_kind;
    38             loginRecord.finger = loginRecordRequest.finger;
    39             loginRecord.LoginSource = loginRecordRequest.LoginSource;
    40             loginRecord.state = 1;
    41             loginRecord.time = DateTime.Now;
    42 
    43             //插入数据
    44             RecordBLL.InsertLoginRecord(loginRecord);
    45 
    46             return Json(ResponseModel.Succeed("成功"));
    47         }
    48     }
    49 }

    客户端实现:

    1 封装 Post 提交数据的方法

     1   /// <summary> 
     2     /// 后台cs代码中发送POST请求  传值的内容加密了 PicName=123 &Pic=123
     3     /// </summary>
     4     /// <param name="url">请求url</param>
     5     /// <param name="postData">参数</param>
     6     /// <returns></returns>
     7     public static string Post(string url, string postData)
     8     {
     9         System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
    10         byte[] data = encoding.GetBytes(postData);
    11 
    12         // Prepare web request...   编写web请求
    13         //WebRequest发出url请求
    14         System.Net.HttpWebRequest myRequest =
    15         (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
    16 
    17         myRequest.Method = "POST";
    18         myRequest.ContentType = "application/x-www-form-urlencoded";
    19         myRequest.ContentLength = data.Length;
    20         myRequest.KeepAlive = false;
    21         System.IO.Stream newStream = myRequest.GetRequestStream();
    22         //myRequest.BeginGetResponse(
    23 
    24         // Send the data.   
    25         newStream.Write(data, 0, data.Length);
    26         newStream.Close();
    27 
    28         try
    29         {
    30             // Get response   返回来自internet资源的响应
    31             System.Net.HttpWebResponse myResponse = (System.Net.HttpWebResponse)myRequest.GetResponse();
    32             System.IO.StreamReader reader = new System.IO.StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
    33             string content = reader.ReadToEnd();
    34             return content;
    35         }
    36         catch (Exception ex)
    37         {
    38             return "错误提示:" + ex.Message;
    39         }
    40     }

    2  创建相同的传递数据实体

     1     public class LoginRecordRequest
     2     {
     3         public int cust_id { get; set; }
     4 
     5         public string cust_kind { get; set; }
     6      
     7         public string finger { get; set; }
     8 
     9         public string LoginSource { get; set; }
    10     }

    3 调用接口 传递数据

     注意:传递数据的拼接方式;

     /// <summary>
            /// 首页
            /// </summary>
            /// <returns></returns>
            public ActionResult Index()
            {
                LoginRecordRequest loginRecord = new LoginRecordRequest();
                loginRecord.cust_id = 13456;
                loginRecord.cust_kind = "配货信息部";
                loginRecord.LoginSource = "m站";
               
                string postData = "cust_id="+loginRecord.cust_id+ "&cust_kind="+loginRecord.cust_kind+ "&finger="+loginRecord.finger + "&LoginSource="+loginRecord.LoginSource;
    
                string str =  PostSubmitter.Post("http://www.ceshi.com/LoginRecores/Index", postData);
     
                return View("NewIndex",model);
            }
  • 相关阅读:
    定时执行
    history 命令历史
    last
    文件解压缩 tar zip
    硬件信息 dmidecode dmesg lsdev lshw haparm lsusb
    文件加密 解密 pdftk openssl gpg vim
    vim 脚本——插件
    irc
    telnet
    go 垃圾回收机制
  • 原文地址:https://www.cnblogs.com/Learnall/p/12960586.html
Copyright © 2020-2023  润新知