asp.net下URL处理两个小工具方法

 更新时间:2007年04月13日 00:00:00   作者:   我要评论
有的时候我们要操作一个URL地址中查询参数,为了不破坏URL的原有结构,我们一般不能直接在URL的后面加&query=value,特别是我们的URL中有多个参数时,这种处理更麻烦。
下面两个小方法就是专门用来为一个URL添加一个查询参数或删除一个查询参数,这两个方法隐藏了原URL有无参数,是不是原来就有这个参数,有没有fragment(#anchor)这些细节和处理
/**//// <summary>
/// Add a query to an URL.
/// if the URL has not any query,then append the query key and value to it.
/// if the URL has some queries, then check it if exists the query key already,replace the value, or append the key and value
/// if the URL has any fragment, append fragments to the URL end.
/// </summary>
public static string SafeAddQueryToURL(string key,string value,string url)
{
int fragPos = url.LastIndexOf("#");
string fragment = string.Empty;
if(fragPos > -1)
{
fragment = url.Substring(fragPos);
url = url.Substring(0,fragPos);
}
int querystart = url.IndexOf("?");
if(querystart < 0)
{
url +="?"+key+"="+value;
}
else
{
Regex reg = new Regex(@"(?<=[&\?])"+key+@"=[^\s&#]*",RegexOptions.Compiled);
if(reg.IsMatch(url))
url = reg.Replace(url,key+"="+value);
else
url += "&"+key+"="+value;
}
return url+fragment;
}
/**//// <summary>
/// Remove a query from url
/// </summary>
/// <param name="key"></param>
/// <param name="url"></param>
/// <returns></returns>
public static string SafeRemoveQueryFromURL(string key,string url)
{
Regex reg = new Regex(@"[&\?]"+key+@"=[^\s&#]*&?",RegexOptions.Compiled);
return reg.Replace(url,new MatchEvaluator(PutAwayGarbageFromURL));
}
private static string PutAwayGarbageFromURL(Match match)
{
string value = match.Value;
if(value.EndsWith("&"))
return value.Substring(0,1);
else
return string.Empty;
}

测试:
string s = "http://www.cnblogs.com/?a=1&b=2&c=3#tag";
WL(SafeRemoveQueryFromURL("a",s));
WL(SafeRemoveQueryFromURL("b",s));
WL(SafeRemoveQueryFromURL("c",s));
WL(SafeAddQueryToURL("d","new",s));
WL(SafeAddQueryToURL("a","newvalue",s));
// 输出如下:
// http://www.cnblogs.com/?b=2&c=3#tag
// http://www.cnblogs.com/?a=1&c=3#tag
// http://www.cnblogs.com/?a=1&b=2#tag
// http://www.cnblogs.com/?a=1&b=2&c=3&d=new#tag
// http://www.cnblogs.com/?a=newvalue&b=2&c=3#tag 

相关文章

  • ABP框架中的日志功能完全解析

    ABP框架中的日志功能完全解析

    ABP(ASP.NET Boilerplate)是基于ASP.NET的Web开发框架,其在日志方面的功能非常强大,特别是审计跟踪日志,下面我们就来进行ABP框架中的日志功能完全解析
    2016-06-06
  • .aspx中的命名空间设置实现代码

    .aspx中的命名空间设置实现代码

    原来以为.aspx 与.cs文件是属于同一个类,今天才意识到自己错了。
    2009-04-04
  • .NET Core开发日志之OData(Open Data Protocol)

    .NET Core开发日志之OData(Open Data Protocol)

    这篇文章主要给大家介绍了关于.NET Core开发日志之OData(Open Data Protocol)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • asp.net中利用ashx实现图片防盗链的原理分析

    asp.net中利用ashx实现图片防盗链的原理分析

    盗链的危害我就不说了,网上有很多。下面是asp.net下利用ashx的防盗链原理分析
    2008-09-09
  • System.Web中不存在类型或命名空间名称script 找不到System.Web.Extensions.dll引用

    System.Web中不存在类型或命名空间名称script 找不到System.Web.

    这篇文章主要为大家详细介绍了System.Web中不存在类型或命名空间名称script,找不到System.Web.Extensions.dll引用的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 详解.net core下如何简单构建高可用服务集群

    详解.net core下如何简单构建高可用服务集群

    一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,这篇文章主要介绍了详解.net core下如何简单构建高可用服务集群,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Asp.net防止盗链的实现原理分析

    Asp.net防止盗链的实现原理分析

    今天在书上偶然看到了如何实现防盗链的问题,到网上查看了一下盗链主要是其他的一些网站引用本站图片或者下载链接。
    2011-01-01
  • Asp.Net Core轻松学习系列之配置文件

    Asp.Net Core轻松学习系列之配置文件

    这篇文章主要给大家介绍了关于Asp.Net Core轻松学习系列之配置文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • ASP.NET MVC的四种验证编程方式

    ASP.NET MVC的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定,需要的朋友可以参考下
    2015-10-10
  • asp.net自动更新组件分享

    asp.net自动更新组件分享

    前两天在博客上发布了一篇英文的自动更新组件文章Release a AutoUpdater tool,那么在这篇文章中,我们也对其功能进行一些简单说明,这个组件非常简单,所以大家可以下载进行一些改进。
    2010-10-10

最新评论