• ASP.NET进行请求转发


    前言

    前两天将网站的部分功能在小程序上实现,网站的后台是http,没有配置域名和安全证书,小程序的线上版本是无法访问的,因此需要从配有域名和安全证书的站点进行转发。即小程序请求A,A转发请求到B,B获取数据给A,A再回传给小程序。

    本文若有出入,请指正——来自渣渣的颤抖
    客官可移步到https://fanjiajia.cn/2019/07/04/Cplusplus/flx1/

    ASP.Net接收前台发送的请求都是从一个一般处理程序ashx开始的

    public void ProcessRequest(HttpContext context)
    

    context即为请求的上下文,包括了请求的参数等等信息。

    实现

    一开始,我自信的以为实现这样的转发是特别easy的一件事,因为在我漫无边际的知识储备中,一个熟悉而又陌生但却非常有好感的字眼——redirect浮现在我眼前,完美。
    然而,啪啪啪打脸发生在我redirect之后,B获取参数抛出一个非常性感的异常,未将对象添加到引用的实例,即空指针异常。
    仔细一想,mb,redirect后参数没有带过去啊,但是说明转发成功了,开森,然而,我真的太年轻啊。
    百度,没有人说redirect可以带参数,(所以我也不知道到底可不可以),凉凉
    没办法最后只能新建一个request,自己封装请求。

     try
     {
          string host_reservation = ""; // 本地车辆预约网站后台
          string host_reservation = ""; // 实验楼车辆预约网站后台
          string host_reservation = ""; // 现场车辆预约网站后台
          string baseurl_reservation = "http://" + host_reservation + "/Handler/WebSpace/XX/XX.ashx";
          HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(baseurl_reservation);
          Encoding encoding = Encoding.UTF8;
          string param = HttpUtil.GetPostParams(context);
          Utility.LogWrite.WriteTestLog("paras", param);
          byte[] bs = Encoding.UTF8.GetBytes(param);
          string responseData = String.Empty;
          req.Method = "POST";
          req.ContentType = "application/json"; // 'application/json'  "application/x-www-form-urlencoded"
          req.ContentLength = bs.Length;
          using (Stream reqStream = req.GetRequestStream())
          {
                reqStream.Write(bs, 0, bs.Length);
                reqStream.Close();
          }
          using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
          {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
                 {
                         responseData = reader.ReadToEnd().ToString();
                  }
                         context.Response.Write(responseData);
                  }
    }
    catch (Exception e)
    {
         LogWrite.WriteSysLog("Reservation_Location", e);
         context.Response.Write(BackDataUtil.BackResult(110, "异常了", "0"));
    }
    

    其实也不复杂,就是再发起一次请求,这里注意,req.ContentType,我已开始用的application/x-www-form-urlencoded,发送到B的中文会乱码

    最后完美实现,然而没高兴多会儿,直接抛弃了我这么辛苦实现的,因为这玩意实在是太慢了,本来B上的处理,数据量就较大,再加上转发,慢得我可以边等他加载,边玩王者,,,,,为什么说这玩意慢呢,因为现在把B上的内容copy到A上了,不转发了,确实快了,在下觉得是不是因为这里的流处理,流这个东西,谁知道呢!

    最后

    此致,敬礼

  • 相关阅读:
    关于二进制——lowbit运算
    代码风格
    焦作区域赛——反思及期望
    第一次参加acm区域赛
    0——1分数问题规划
    [FZYZOJ 1339] 修改密码
    [HDU 1856] More is better
    并查集小结
    [FZYZOJ 1031] 无线网络
    [FZYZOJ 1038] 隧道
  • 原文地址:https://www.cnblogs.com/numen-fan/p/11134804.html
Copyright © 2020-2023  润新知