C#.NET Request相关操作

原文见:http://www.cnblogs.com/livexy/archive/2010/07/05/1771635.html

</pre><pre name="code" class="csharp">using System;
using System.Web;
using System.Text;

namespace Pub.Class
{
    /// <summary>
    /// Requests操作类
    /// </summary>
    public class Request2 {
        #region Get/GetInt/GetFloat
        /// <summary>
        /// 接收传值
        /// </summary>
        /// <param name="VarName">参数名称</param>
        /// <returns>参数对应的值</returns>
        static public String Get(String VarName)
        {
            string varValue = "";
            if (HttpContext.Current.Request[VarName]!=null) 
                varValue = HttpContext.Current.Request[VarName].ToString();
            return varValue;
        }
        /// <summary>
        /// GetInt
        /// </summary>
        /// <param name="varName"></param>
        /// <param name="defValue"></param>
        /// <returns></returns>
        static public int GetInt(string varName, int defValue) { return Get(varName).ToInt(defValue); }
        /// <summary>
        /// GetFloat
        /// </summary>
        /// <param name="varName"></param>
        /// <param name="defValue"></param>
        /// <returns></returns>
        static public float GetFloat(string varName, int defValue) { return Get(varName).ToFloat(defValue); }
        #endregion

        #region GetQ/GetQInt/GetQFloat
        /// <summary>
        /// 取URL上的参数
        /// </summary>
        /// <param name="VarName">参数名</param>
        /// <returns>返回参数</returns>
        static public String GetQ(String VarName)
        {
            string varValue = "";
            if (HttpContext.Current.Request.QueryString[VarName] != null)
                varValue = HttpContext.Current.Request.QueryString[VarName].ToString();
            return varValue;
        }
        /// <summary>
        /// GetQInt
        /// </summary>
        /// <param name="varName"></param>
        /// <param name="defValue"></param>
        /// <returns></returns>
        static public int GetQInt(string varName, int defValue) { return GetQ(varName).ToInt(defValue); }
        /// <summary>
        /// GetQFloat
        /// </summary>
        /// <param name="varName"></param>
        /// <param name="defValue"></param>
        /// <returns></returns>
        static public float GetQFloat(string varName, int defValue) { return GetQ(varName).ToFloat(defValue); }
        #endregion

        #region GetF/GetFInt/GetFFloat
        /// <summary>
        /// 取POST提交的数据
        /// </summary>
        /// <param name="VarName">名称</param>
        /// <returns>返回值</returns>
        static public String GetF(String VarName)
        {
            string varValue = "";
            if (HttpContext.Current.Request.Form[VarName]!=null)
                varValue = HttpContext.Current.Request.Form[VarName].ToString();
            return varValue;
        }
        /// <summary>
        /// GetFInt
        /// </summary>
        /// <param name="varName"></param>
        /// <param name="defValue"></param>
        /// <returns></returns>
        static public int GetFInt(string varName, int defValue) { return GetF(varName).ToInt(defValue); }
        /// <summary>
        /// GetFFloat
        /// </summary>
        /// <param name="varName"></param>
        /// <param name="defValue"></param>
        /// <returns></returns>
        static public float GetFFloat(string varName, int defValue) { return GetF(varName).ToFloat(defValue); }
        #endregion

        #region IsPost/IsGet
        /// <summary>
  /// 判断当前页面是否接收到了Post请求
  /// </summary>
  /// <returns>是否接收到了Post请求</returns>
  public static bool IsPost()
  {
   return HttpContext.Current.Request.HttpMethod.Equals("POST");
  }
  /// <summary>
  /// 判断当前页面是否接收到了Get请求
  /// </summary>
  /// <returns>是否接收到了Get请求</returns>
  public static bool IsGet()
  {
   return HttpContext.Current.Request.HttpMethod.Equals("GET");
        }
        #endregion

        #region 服务器变量名
        /// <summary>
  /// 返回指定的服务器变量信息
        /// 
  /// </summary>
  /// <param name="strName">服务器变量名</param>
  /// <returns>服务器变量信息</returns>
  public static string GetServerString(string strName)
  {
   if (HttpContext.Current.Request.ServerVariables[strName] == null)
    return "";
   return HttpContext.Current.Request.ServerVariables[strName].ToString();
        }
        #endregion

        #region GetRawUrl/IsBrowserGet/IsSearchEnginesGet/GetPageName/GetQParamCount/GetFParamCount/GetParamCount/
        /// <summary>
  /// 获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))
  /// </summary>
  /// <returns>原始 URL</returns>
  public static string GetRawUrl()
  {
   return HttpContext.Current.Request.RawUrl;
  }
        /// <summary>
  /// 判断当前访问是否来自浏览器软件
  /// </summary>
  /// <returns>当前访问是否来自浏览器软件</returns>
  public static bool IsBrowserGet()
  {
   string[] BrowserName = {"ie", "opera", "netscape", "mozilla", "konqueror", "firefox"};
   string curBrowser = HttpContext.Current.Request.Browser.Type.ToLower();
   for (int i = 0; i < BrowserName.Length; i++) {
    if (curBrowser.IndexOf(BrowserName[i]) >= 0) return true;
   }
   return false;
  }
  /// <summary>
  /// 判断是否来自搜索引擎链接
  /// </summary>
  /// <returns>是否来自搜索引擎链接</returns>
        public static bool IsSearchEnginesGet() {
            if (HttpContext.Current.Request.UrlReferrer != null) {
                string[] strArray = new string[] { "google", "yahoo", "msn", "baidu", "sogou", "sohu", "sina", "163", "lycos", "tom", "yisou", "iask", "soso", "gougou", "zhongsou" };
                string str = HttpContext.Current.Request.UrlReferrer.ToString().ToLower();
                for (int i = 0; i < strArray.Length; i++) {
                    if (str.IndexOf(strArray[i]) >= 0) return true;
                }
            }
            return false;
        }
        /// <summary>
  /// 获得当前页面的名称
  /// </summary>
  /// <returns>当前页面的名称</returns>
  public static string GetPageName()
  {
   string [] urlArr = HttpContext.Current.Request.Url.AbsolutePath.Split('/');
   return urlArr[urlArr.Length - 1].ToLower();
  }
        /// <summary>
  /// 返回表单或Url参数的总个数
  /// </summary>
  /// <returns></returns>
  public static int GetParamCount()
  {
   return HttpContext.Current.Request.Form.Count + HttpContext.Current.Request.QueryString.Count;
  }
        /// <summary>
        /// GET ParamCount
        /// </summary>
        /// <returns></returns>
        public static int GetQParamCount() { return (HttpContext.Current.Request.QueryString.Count); }
        /// <summary>
        /// POST ParamCount
        /// </summary>
        /// <returns></returns>
        public static int GetFParamCount() { return (HttpContext.Current.Request.Form.Count); }
        #endregion

        #region GetCurrentFullHost/GetHost/GetIP/GetUrl/GetReferrer/SaveRequestFile/GetOS/GetBrowser
        /// <summary>
        /// 取全IP包括端口
        /// </summary>
        /// <returns>IP和端口</returns>
        public static string GetCurrentFullHost()
        {
            HttpRequest request = HttpContext.Current.Request;
            if (!request.Url.IsDefaultPort)
                return string.Format("{0}:{1}", request.Url.Host, request.Url.Port.ToString());
            return request.Url.Host;
        }
        /// <summary>
        /// 取主机名
        /// </summary>
        /// <returns></returns>
        public static string GetHost() { return HttpContext.Current.Request.Url.Host; }
        /// <summary>
        /// 前台URL
        /// </summary>
        /// <returns></returns>
        public static string GetUrl() { return HttpContext.Current.Request.Url.ToString(); }
        /// <summary>
        /// 来源URL
        /// </summary>
        /// <returns></returns>
        public static string GetReferrer() {
            string str = null;
            try {
                str = GetServerString("HTTP_REFERER").Trim();
                if (str.Length==0) str = HttpContext.Current.Request.UrlReferrer.ToString();
            } catch { }

            if (str == null) return "";
            return str;
        }
        /// <summary>
        /// 保存Request文件
        /// </summary>
        /// <param name="path">保存到文件名</param>
        public static void SaveRequestFile(string path)
        {
            if (HttpContext.Current.Request.Files.Count > 0) HttpContext.Current.Request.Files[0].SaveAs(path);
        }
        #region GetIP
        /// <summary>
        /// 取IP
        /// </summary>
        /// <returns>返回IP</returns>
        public static string GetIP() {
            string result = String.Empty;
            result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (result != null && result != String.Empty) {//可能有代理 
                if (result.IndexOf(".") == -1) result = null;
                else {
                    if (result.IndexOf(",") != -1) {//有“,”,估计多个代理。取第一个不是内网的IP。 
                        
                        result = result.Replace(" ", "").Replace("'", "");
                        string[] temparyip = result.Split(",;".ToCharArray());
                        for (int i = 0; i < temparyip.Length; i++) {
                            if (temparyip[i].IsIP()
                                && temparyip[i].Substring(0, 3) != "10."
                                && temparyip[i].Substring(0, 7) != "192.168"
                                && temparyip[i].Substring(0, 7) != "172.16.")
                            {
                                return temparyip[i];    //找到不是内网的地址 
                            }
                        }
                    }
                    else if (result.IsIP()) //代理即是IP格式 
                        return result;
                    else
                        result = null;    //代理中的内容 非IP,取IP 
                }

            }

            string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null
                && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) 
                ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
                : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

            if (null == result || result == String.Empty)
                result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

            if (result == null || result == String.Empty)
                result = HttpContext.Current.Request.UserHostAddress;

            return result;
        }
        #endregion 
        #region GetOS
        /// <summary>
        /// 取操作系统
        /// </summary>
        /// <returns>返回操作系统</returns>
        public static string GetOS() {
            HttpBrowserCapabilities bc = new HttpBrowserCapabilities();
            bc = System.Web.HttpContext.Current.Request.Browser;
            return bc.Platform;
        }
        #endregion 
        #region GetBrowser
        /// <summary>
        /// 取游览器
        /// </summary>
        /// <returns>返回游览器</returns>
        public static string GetBrowser()
        {
            HttpBrowserCapabilities bc = new HttpBrowserCapabilities();
            bc = System.Web.HttpContext.Current.Request.Browser;
            return bc.Type;
        }
        #endregion 
        #endregion
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用C# .NET Framework写的微信扫码支付的WEB应用程序示例代码: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Xml; using System.Xml.Linq; using System.Security.Cryptography; using System.Text; using System.Net; using System.IO; namespace WeChatPayDemo.Controllers { public class HomeController : Controller { // 商户号 const string mch_id = "your-mch-id"; // 商户API密钥 const string api_key = "your-api-key"; // 应用ID const string appid = "your-appid"; // 通知地址 const string notify_url = "http://your-domain.com/notify"; // 支付请求地址 const string pay_url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; // 首页 public ActionResult Index() { return View(); } // 支付页面 public ActionResult Pay(string total_fee) { // 生成订单号 string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmssfff") + new Random().Next(1000, 9999); // 构造支付请求参数 SortedDictionary<string, object> parameters = new SortedDictionary<string, object>(); parameters.Add("appid", appid); parameters.Add("mch_id", mch_id); parameters.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", "")); parameters.Add("body", "微信扫码支付"); parameters.Add("out_trade_no", out_trade_no); parameters.Add("total_fee", int.Parse(float.Parse(total_fee) * 100 + "")); parameters.Add("spbill_create_ip", Request.UserHostAddress); parameters.Add("notify_url", notify_url); parameters.Add("trade_type", "NATIVE"); // 签名 string sign = Sign(parameters); parameters.Add("sign", sign); // 构造XML请求内容 string requestXml = BuildXml(parameters); // 发送支付请求 string responseXml = HttpPost(pay_url, requestXml); // 解析响应XML XDocument doc = XDocument.Parse(responseXml); string prepay_id = doc.Element("xml").Element("prepay_id").Value; string code_url = doc.Element("xml").Element("code_url").Value; // 构造二维码图片链接 string qr_code_url = $"https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={HttpUtility.UrlEncode(code_url)}"; // 传递二维码图片链接和订单号到支付页面 ViewBag.QRCodeUrl = qr_code_url; ViewBag.OutTradeNo = out_trade_no; return View(); } // 支付结果通知接口 public ActionResult Notify() { // 接收POST数据 Stream stream = Request.InputStream; byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); string xml = Encoding.UTF8.GetString(bytes); // 解析XML数据 XDocument doc = XDocument.Parse(xml); string return_code = doc.Element("xml").Element("return_code").Value; string return_msg = doc.Element("xml").Element("return_msg").Value; string result_code = doc.Element("xml").Element("result_code").Value; string out_trade_no = doc.Element("xml").Element("out_trade_no").Value; string transaction_id = doc.Element("xml").Element("transaction_id").Value; // 验证签名 SortedDictionary<string, object> parameters = new SortedDictionary<string, object>(); parameters.Add("return_code", return_code); parameters.Add("return_msg", return_msg); parameters.Add("result_code", result_code); parameters.Add("out_trade_no", out_trade_no); parameters.Add("transaction_id", transaction_id); string sign = Sign(parameters); string sign_received = doc.Element("xml").Element("sign").Value; if (sign == sign_received) { // 处理支付结果 // ... // 返回通知结果 return Content(BuildXml(new Dictionary<string, object> { { "return_code", "SUCCESS" }, { "return_msg", "OK" } })); } else { // 签名验证失败 // ... // 返回错误信息 return Content(BuildXml(new Dictionary<string, object> { { "return_code", "FAIL" }, { "return_msg", "签名验证失败" } })); } } // 签名算法 private string Sign(IDictionary<string, object> parameters) { string stringA = string.Join("&", parameters.Where(p => !string.IsNullOrEmpty(p.Value.ToString())).OrderBy(p => p.Key).Select(p => $"{p.Key}={p.Value}")); string stringSignTemp = $"{stringA}&key={api_key}"; string sign = MD5(stringSignTemp).ToUpper(); return sign; } // MD5算法 private string MD5(string input) { MD5 md5 = MD5.Create(); byte[] buffer = Encoding.UTF8.GetBytes(input); byte[] hash = md5.ComputeHash(buffer); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("x2")); } return sb.ToString(); } // 构造XML请求内容 private string BuildXml(IDictionary<string, object> parameters) { StringBuilder sb = new StringBuilder(); sb.Append("<xml>"); foreach (var kv in parameters) { sb.Append($"<{kv.Key}>{kv.Value}</{kv.Key}>"); } sb.Append("</xml>"); return sb.ToString(); } // 发送HTTP POST请求 private string HttpPost(string url, string data) { byte[] bytes = Encoding.UTF8.GetBytes(data); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = bytes.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(bytes, 0, bytes.Length); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream stream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(stream)) { return reader.ReadToEnd(); } } } } } } ``` 以上代码仅供参考,实际开发中需要根据实际情况进行相应的修改和完善。同时,也需要遵循相关的安全规范和隐私保护措施,确保用户信息和支付安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值