C# 如何解析获取Url参数值

今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的Url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串。样例如下:

http://www.cplemom.com/?url=https://www.jb51.net/={"id":12,"name":"今天天气不错"}

现在的问题就是,我需要将url参数中的data值的json中的id修改为url参数中id的值,然后再拼接成完整的url去获取数据。简单来说就是将url进行如下改变,现在问题的重点就在于如何根据url获取对应的参数值了。

//处理前
https://www.jb51.net/={"id":12,"name":"今天天气不错"}

//处理后
https://www.jb51.net/={"id":15,"name":"今天天气不错"}

Url编码

这里插一句,在将url作为参数进行请求的时候,需要注意一些特殊字符(比如 ? "" / 等)对请求的影响,特别是发送Get请求的时候。可以在发送请求前,先对url进行编码处理。

encodeURIComponent(url) //js
HttpUtility.UrlEncode(url) //C#
url.QueryEscape(url) //Go

获取Url参数

仔细思考了下,解析url获取参数的也无非通过分割关键字符来实现。区别就是分割字符的方式是通过正则匹配或者遍历字符罢了。下面就介绍框架带的方法,然后通过总结一些规律,最后自己实现一个方法。

我知道肯定有很多朋友经常使用HttpUtility类中的UrlEncode/UrlDecode方法,其实该类还有一个ParseQueryString方法,用来解析url参数。该方法需要传入url参数部分字符串,然后返回一个NameValueCollection对象(以key/value的形式记录了所有参数)。

string url = "https://www.jb51.net/={'id':12,'name':'今天天气不错'}";
var uri = new Uri(url);

var collection= HttpUtility.ParseQueryString(uri.Query);//默认采用UTF-8编码,当然也可以传入特定编码进行解析
//var collection= HttpUtility.ParseQueryString(uri.Query,Encoding.ASCII);

Console.WriteLine(collection["data"]);//输出结果: {'id':12,'name':'今天天气不错'}

该方法有几个要注意的点

  1. uri.Query是?开头的,但是在转为键值对以后被自动过滤掉了,且只会过滤一个?字符
  2. 参数内容会自动使用UTF-8解码
  3. 对于传递的数组参数(?ids=1&ids=2),会通过,
  4. 在参数字符中通过&划分后,只会把第一个=前的字符串作为key

基于上述一些要求就可以自己写一个解析参数的方式了。

public static Dictionary<string, string> ParseQueryString(string url)
{
	if (string.IsNullOrWhiteSpace(url))
	{
		throw new ArgumentNullException("url");
	}
	var uri = new Uri(url);
	if (string.IsNullOrWhiteSpace(uri.Query))
	{
		return new Dictionary<string, string>();
	}
     //1.去除第一个前导?字符
	var dic = uri.Query.Substring(1)
      //2.通过&划分各个参数
			.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries)
      //3.通过=划分参数key和value,且保证只分割第一个=字符
			.Select(param => param.Split(new char[] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries))
      //4.通过相同的参数key进行分组
			.GroupBy(part => part[0], part => part.Length > 1 ? part[1] : string.Empty)
      //5.将相同key的value以,拼接
			.ToDictionary(group => group.Key, group => string.Join(",", group));

	return dic;
}

总结

总体来说这只是一个小小的功能点,往往框架本身就帮我们封装好了解析url获取参数的方法,但是自己去实现的时候,可能就会有这样那样的情况没有考虑到。最后如果有遇到相似需求的朋友,我建议还是用HttpUtility.ParseQueryString()吧~~~

以上就是C# 如何解析获取Url参数值的详细内容,更多关于c# 解析获取Url参数值的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#实现自动识别URL网址的方法

    本文实例讲述了C#实现自动识别URL网址的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Text.RegularExpressions; namespace ConsoleApplication3 { class Program { static void Main(string[] args) {

  • C#分析URL参数并获取参数和值对应列表的方法

    本文实例讲述了C#分析URL参数获取参数和值对应列表的方法.分享给大家供大家参考.具体分析如下: 这个C#函数用于分析url中传递的所有参数,输出一个参数名和参数值对应的NameValueCollection列表,经常能用得到 /// <summary> /// 分析 url 字符串中的参数信息 /// </summary> /// <param name="url">输入的 URL</param> /// <param name=

  • C#实现类似新浪微博长URL转短地址的方法

    本文实例讲述了C#实现类似新浪微博长URL转短地址的方法.分享给大家供大家参考.具体如下: 一.前台判断用户输入URL的JS代码如下. function CheckInput() { var $txtLength = $("#inp_text").val().length; if ($txtLength > 10) { var url = $("#inp_text").val(); var xx = url.match(RegExp("((news|

  • C#获取当前页面的URL示例代码

    本实例的测试URL:http://www.mystudy.cn/web/index.aspx 1.通过C#获取当前页面的URL 复制代码 代码如下: string url = Request.Url.AbsoluteUri; //结果: http://www.mystudy.cn/web/index.aspx string host = Request.Url.Host; //结果:www.mystudy.cn string rawUrl = Request.RawUrl; //结果:/web/

  • C#Url操作类封装、仿Node.Js中的Url模块实例

    在实际开发中,需要用到的数据在url中,因此就需要我们来获取到url中有用的信息,涉及到查询.添加.修改.删除等操作,下面我们就具体来了解一下. 1.简单实例 目前常用Url操作,查询.添加.修改.删除链接参数,重构生成链接等功能. //string url = "http://www.gongjuji.net:8081"; //string url = "http://www.gongjuji.net/"; //string url = "http://

  • URL中去除指定参数实现C#代码

    复制代码 代码如下: #region URL中去除指定参数 /// <summary> /// 中去除指定参数 /// </summary> /// <param name="url">地址</param> /// <param name="param">参数</param> /// <returns></returns> public static string bui

  • C#利用System.Uri转URL为绝对地址的方法

    本文实例讲述了C#利用System.Uri转URL为绝对地址的方法.分享给大家供大家参考.具体分析如下: 在使用ASPOSE.Word生成Word文档时可以通过InsertHtml(html)来将图文信息写入Word文档(图片内嵌),但要求html里图片的src是绝对全路径,所以需要对html进行转化. 获取html可以来自数据库数据或者通过网络抓取,得到之后使用System.Uri来进行替换即可. 示例如下: Uri uri = new Uri(http://www.baidu.com); U

  • C#实现在网页中根据url截图并输出到网页的方法

    本文实例讲述了C#实现在网页中根据url截图并输出到网页的方法.分享给大家供大家参考,具体如下: 网页截图是很多站点的一个小需求,这段代码实现的是如何根据url获得网页截图并输出到网页中. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Thr

  • C#检查字符串是否是合法URL地址的方法

    本文实例讲述了C#检查字符串是否是合法URL地址的方法.分享给大家供大家参考.具体实现方法如下: protected string HTTPChecker(string Value) { if((Value.Substring(0,7) != "http://") && (Value.Substring(0,8) != "https://")) { Value = "http://" + Value; } return Value

  • JavaScript、C# URL编码、解码总结

    JavaScript部分 encodeURI() (解码为:decodeURI()):不会转义的字符:- _ . ! ~ * ' ( ) ;/?:@&=+$,# 例如: encodeURI("http://www.jb51.net?a=-_.!~*'();/?:@&=+$,#") 输出: "http://www.jb51.net?a=-_.!~*'();/?:@&=+$,#" encodeURIComponent() (解码为:decodeU

  • asp.net C#检查URL是否有效的方法

    我们有时候需要对用户输入的网站(URL)进行有效性检查, 复制代码 代码如下: function CheckUrl(str) {    var RegUrl = new RegExp();    RegUrl.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\.[A-Za-z0-9-_%&?/.=]+$");    if (!RegUrl.test(str)) {        return false;    }    return true;} 不止

随机推荐