コード例 #1
0
 /// <summary>
 /// 一个url发起异步的http请求
 /// </summary>
 /// <param name="url"></param>
 /// <param name="_query"></param>
 /// <param name="files"></param>
 /// <param name="callback"></param>
 public static void BeginPostFromDataString(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <string, System.Exception> callback)
 {
     BeginPostFromData(url, _query, files, (res, e) =>
     {
         Process_GetHttpResponseString(res, e, callback);
     });
 }
コード例 #2
0
ファイル: WebSocket_Handle.cs プロジェクト: shenrui93/saker
        private bool CheckHederData(IWebParamData s, out string accept, out int version)
        {
            accept  = "";
            version = 0;


            var upgrade = (s["Upgrade"] + "").Replace(" ", "");

            if (upgrade.IndexOf("websocket", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }

            var connection = (s["Connection"] + "").Replace(" ", "");

            if (connection.IndexOf("upgrade", StringComparison.OrdinalIgnoreCase) == -1)
            {
                return(false);
            }

            var secWebSocketVersion = (s["Sec-WebSocket-Version"] + "").Replace(" ", "");

            version = GetVersionList(secWebSocketVersion);


            switch (version)
            {
            case 13:
                break;

            default:
            {
                //版本错误
                return(false);
            }
            }

            var secWebSocketKey = s["Sec-WebSocket-Key"] + "";

            //检查webSocket的请求头
            if (string.IsNullOrEmpty(secWebSocketKey))
            {
                return(false);
            }
            var keyData = ToBase64Bytes(secWebSocketKey);

            if (keyData.Length != 16)
            {
                return(false);
            }

            accept = Sha1Base64String(secWebSocketKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
            return(true);
        }
コード例 #3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="url"></param>
 /// <param name="_query"></param>
 /// <param name="files"></param>
 /// <returns></returns>
 public static string PostFromDataString(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, IWebParamData header = null)
 {
     try
     {
         var response = PostFromData(url, _query, files, header);
         return(GetStringFromResponse(response));
     }
     catch //(Exception ex)
     {
         return("");
     }
 }
コード例 #4
0
ファイル: BaseApiController.cs プロジェクト: linml/QLANMJ
        public virtual void PushSystemEventMsg(uint userId, string eventCode, IWebParamData eventData = null)
        {
            var msg = new QL.Common.MSG_S_SystemPushMsg()
            {
                TargerUser = userId,
                EventCode  = eventCode,
                EventData  = eventData?.Select(p => new QL.Common.KeyValueData()
                {
                    Key = p.Key, Value = p.Value
                }).ToArray()
            };

            QL.Server.RedisOP.RedisOperation.SendMessageToUser(userId, msg);
        }
コード例 #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="url"></param>
        /// <param name="_query"></param>
        /// <param name="files"></param>
        /// <returns></returns>
        public static HttpWebResponse PostFromData(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, IWebParamData header = null)
        {
            //写入请求流
            var req = BuilderRequest(url, _query, files, r =>
            {
                if (header != null)
                {
                    foreach (var kv in header)
                    {
                        r.Headers[kv.Key] = kv.Value;
                    }
                }
            });
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();

            return(res);
        }
コード例 #6
0
        /// <summary>
        /// 将参数合并到Url连接中
        /// </summary>
        /// <param name="url">需要合并参数的url</param>
        /// <param name="param">需要合并的参数</param>
        /// <param name="isCover">指定使用覆盖模式,如果需要用合并参数覆盖原url参数则为 true。如果使用原url参数覆盖合并参数则为 false </param>
        /// <returns></returns>
        public static string MergeUrlQueryString(string url, IWebParamData param, bool isCover = false)
        {
            if (param == null)
            {
                return(url);
            }
            if (string.IsNullOrEmpty(url))
            {
                return("?" + param.ToUrl());
            }
            var wen_index = url.IndexOf('?');

            if (wen_index < 0)
            {
                return(url + "?" + param.ToUrl());
            }
            if (wen_index + 1 >= url.Length)
            {
                return(url + param.ToUrl());
            }

            var path = url.Substring(0, wen_index);
            var qstr = url.Substring(wen_index + 1);

            var q_p = WebParamData.FromUrl(qstr);

            if (isCover)
            {
                //用合并参数覆盖原url参数
                foreach (var r in param)
                {
                    q_p[r.Key] = r.Value;
                }
                return($"{path}?{q_p.ToUrl()}");
            }
            else
            {
                //用原url参数覆盖合并参数
                foreach (var r in q_p)
                {
                    param[r.Key] = r.Value;
                }

                return($"{path}?{param.ToUrl()}");
            }
        }
コード例 #7
0
        /*********************** Begin Method *************************/

        /// <summary>
        /// 一个url发起异步的http请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="_query"></param>
        /// <param name="files"></param>
        /// <param name="callback"></param>
        static void BeginPostFromData(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <HttpWebResponse, System.Exception> callback)
        {
            ThreadPoolProviderManager.QueueUserWorkItem(() =>
            {
                try
                {
                    var req = BuilderRequest(url, _query, files, null);
                    using (var res = (HttpWebResponse)req.GetResponse())
                    {
                        callback?.Invoke(res, null);
                    }
                }
                catch (System.Exception ex)
                {
                    callback?.Invoke(null, ex);
                }
            });
        }
コード例 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public virtual bool CheckAuth(IWebParamData param, string url)
        {
            if (param == null)
            {
                return(false);
            }

            if (param.CheckTimeOut(5 * 60))
            {
                return(false);
            }
            if (!param.VerifySign(PublicRsaKey, url))
            {
                return(false);
            }


            return(true);
        }
コード例 #9
0
ファイル: BaseApiController.cs プロジェクト: linml/QLANMJ
        public virtual void PushSystemEventMsg(uint[] userIds, string eventCode, IWebParamData eventData = null)
        {
            if (userIds == null && userIds.Length <= 0)
            {
                return;
            }


            var msg = new QL.Common.MSG_S_SystemPushMsg()
            {
                TargerUser = 0,
                EventCode  = eventCode,
                EventData  = eventData?.Select(p => new QL.Common.KeyValueData()
                {
                    Key = p.Key, Value = p.Value
                }).ToArray()
            };

            foreach (var userId in userIds)
            {
                msg.TargerUser = userId;
                QL.Server.RedisOP.RedisOperation.SendMessageToUser(userId, msg);
            }
        }
コード例 #10
0
        private static HttpWebRequest BuilderRequest(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <HttpWebRequest> BeforSendHeader)
        {
            byte[] _newlinebytes      = baseEncoding.GetBytes("\r\n");
            var    _newlinebytescount = _newlinebytes.Length;

            using (var ms = new MemoryStream())
            {
                #region 文件流


                //写入请求头参数信息,query
                StringBuilder _queryStringbuffer = new StringBuilder();

                foreach (var p in _query)
                {
                    _queryStringbuffer.Length = 0;

                    _queryStringbuffer.Append("--");
                    _queryStringbuffer.Append(ConstString.BOUNDARY);
                    _queryStringbuffer.Append("\r\n");
                    _queryStringbuffer.Append("Content-Disposition: form-data; name=\"" + p.Key + "\"\r\n\r\n");
                    _queryStringbuffer.Append(p.Value);
                    _queryStringbuffer.Append("\r\n");

                    //写入请求流
                    var data = baseEncoding.GetBytes(_queryStringbuffer.ToString());
                    ms.Write(data, 0, data.Length);
                }

                if (files != null)
                {
                    #region 写文件


                    //写文件
                    foreach (var f in files)
                    {
                        var file = f.Value;
                        if (!file.IsHasFile)
                        {
                            continue;
                        }


                        _queryStringbuffer.Length = 0;

                        _queryStringbuffer.Append("--");
                        _queryStringbuffer.Append(ConstString.BOUNDARY);
                        _queryStringbuffer.Append("\r\n");
                        _queryStringbuffer.Append("Content-Disposition:form-data;name=\"" + f.Key + "\";filename=\"" + file.FileName + "\"\r\n");
                        _queryStringbuffer.Append("Content-Type:application/octet-stream\r\n\r\n");


                        //写入请求流
                        var data = baseEncoding.GetBytes(_queryStringbuffer.ToString());
                        ms.Write(data, 0, data.Length);

                        file.WriteTo(ms);

                        //写入更新的换行符
                        ms.Write(_newlinebytes, 0, _newlinebytescount);
                    }
                    ;

                    #endregion
                }

                #endregion

                //写入结束标记

                //byte[] end_data = ("--" +   BOUNDARY + "--\r\n").getBytes();//数据结束标志
                byte[] end_data = baseEncoding.GetBytes($"--" + ConstString.BOUNDARY + "--\r\n");//数据结束标志

                ms.Write(end_data, 0, end_data.Length);



                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method        = "post";
                req.ContentLength = ms.Length;
                req.ContentType   = ConstString.MULTIPART_FORM_DATAContextType;

                BeforSendHeader?.Invoke(req);


                using (var req_stream = req.GetRequestStream())
                {
                    if (ms.CanSeek)
                    {
                        ms.Position = 0;
                    }
                    ms.CopyTo(req_stream);
                    req_stream.Flush();

                    return(req);
                }
            }
        }
コード例 #11
0
ファイル: WebSocket_Handle.cs プロジェクト: shenrui93/saker
        private void ReadHeaderEnd(string data)
        {
            HttpRequestMatch match;

            if (!HttpRequestMatch.TryParse(data, out match))
            {
                ErrorRequest();
                return;
            }
            var head = match.Header;

            this._header = head;

            string accept;
            int    version;
            var    response = "";

            if (!CheckHederData(head, out accept, out version))
            {
                ErrorRequest();
                return;
            }
            switch (version)
            {
            case 13:
            {
                #region Version:13

                var additionalFields = string.Empty;
                var protocol         = head["Sec-WebSocket-Protocol"];
                if (!string.IsNullOrEmpty(protocol))
                {
                    additionalFields += "Sec-WebSocket-Protocol: " + protocol + DefaultValueManager.NewLine;
                }
                //追加一条服务器信息
                additionalFields += AppendServerHeader;


                additionalFields += DefaultValueManager.NewLine;
                response          = string.Format(AcceptRequest, accept, additionalFields);

                var ip = head["X-Forwarded"];
                if (string.IsNullOrEmpty(ip))
                {
                    ip = head["X-Real-IP"];
                }
                if (!string.IsNullOrEmpty(ip))
                {
                    this.webSocketSession?.AcceptSocket?.SetRemoteIP(ip);
                }

                this.webSocketSession.SetHandle(new WebSocketHandleProcessV13(this.webSocketSession)
                    {
                        _header = _header
                    });
                WebSocketSession.SendDataToClient(response.GetUtf8Bytes());

                #endregion
                this.webSocketSession.OnConnect(DefaultValueManager.EmptyMethod);
                return;
            }

            default:
            {
                //服务器暂时不支持其他协议版本的websocket
                response = "HTTP/1.1 401" + DefaultValueManager.NewLine + "Sec-WebSocket-Version:13";
                WebSocketSession.SendDataToClient(response.GetUtf8Bytes());
                return;
            }
            }
        }
コード例 #12
0
ファイル: _WebExternBase.cs プロジェクト: shenrui93/saker
 /// <summary>
 /// 停止当前页面的请求。使用 POST 提交方式 将请求重定向到新 URL 并指定该新 URL。
 /// </summary>
 public static void RedirectPostUrl(this HttpResponseBase response, string url, IWebParamData param)
 {
     response.RedirectPostUrl(url, param, r => true);
 }
コード例 #13
0
ファイル: _WebExternBase.cs プロジェクト: shenrui93/saker
 /// <summary>
 /// 停止当前页面的请求。使用 POST 提交方式 将请求重定向到新 URL 并指定该新 URL。
 /// </summary>
 public static void RedirectPostUrl(this HttpResponseBase response, string url, IWebParamData param, CheckUrlKeyCall func)
 {
     response.Write(param.ToPostHtml(url, func));
     response.Flush();
     response.End();
 }
コード例 #14
0
ファイル: userlogonController.cs プロジェクト: linml/QLANMJ
        private IActionResult ProcessUserLogonResponse(UserLogonCatchInfo userinfo)
        {
            IWebParamData param = null;

            //尝试获取该用户的分享参数
            //if (!string.IsNullOrEmpty(userinfo.UnionID))
            //{
            //    try
            //    {
            //        var url = RedisTools.ReadShareParam(userinfo.UnionID);
            //        if (!string.IsNullOrEmpty(url))
            //        {
            //            param = Uyi.Web.WebParamData.FromUrl(url);
            //        }
            //    }
            //    catch { }
            //}
            if (param == null)
            {
                param = new WebParamData();
            }

            int parentUser = 0;
            //if (!int.TryParse(param["parent"], out parentUser))
            //{
            //    int.TryParse(context.Request["parent"], out parentUser);
            //}


            //初始化数据
            string openid   = userinfo.OpenID;
            string unionId  = userinfo.UnionID;
            string headimg  = userinfo.HeadImg;
            string nickname = userinfo.NickName;

            //调用数据接口
            DataSet ds;

            int retVal = do_WEB_ALL_UserLogon(unionId, userinfo, userinfo.SNSID, out ds);

            this.WriteLog($"玩家登陆:retVal = {retVal}");
            switch (retVal)
            {
            case 1: break;

            case -2:
            {
                return(Json(new
                    {
                        status = "showbox",
                        msg = "您的账号已被封停,请联系客服",
                    }));
            }

            default:
            {
                return(Json(new
                    {
                        status = "showtip",
                        msg = "服务器维护中...",
                    }));
            }
            }

            var dr     = ds.Tables[0].Rows[0];
            var userid = dr.GetData("userid").ConvertToUInt32();

            if (userid <= 0)
            {
                return(WriteFail("登录失败"));
            }

            //userinfo.HeadImg = userinfo.HeadImg;
            //userinfo.NickName = dr["nickname"].ToString();

            var catch_userTokken = GetCatchUserToken(userinfo);

            param["status"]      = "success";
            param["accesstoken"] = GetUserAccessToken(userid);
            param["catchtoken"]  = catch_userTokken;

            //UyiDebug.WriteLog($"用户APP登录输出:{param.ToJson()}");

            //响应结果数据
            return(Json(param));
        }