Regex IIS重写规则以检查querystring,如果不存在则添加它
我正在尝试创建一个IIS URL重写规则,将URL参数附加到URL。url参数为Regex IIS重写规则以检查querystring,如果不存在则添加它,regex,iis-7,url-rewriting,isapi-rewrite,url-rewrite-module,Regex,Iis 7,Url Rewriting,Isapi Rewrite,Url Rewrite Module,我正在尝试创建一个IIS URL重写规则,将URL参数附加到URL。url参数为hssc。因此,通过服务器处理的任何url都需要该参数。请记住,有些URL已经有了自己的参数,而其他URL没有,还有根URL等等,有时它需要添加?hssc=1或&hssc=-因此,如果我有这样一个URL: 应该成为 应该成为 应该成为 应该成为 应该让他一个人呆着 我还希望URL不应该被隐藏(就像在后台重写一样)。我需要URL显示在URL中,因此当用户复制URL或将其添加书签时,参数就在那里 我已经设置了匹配它的
hssc
。因此,通过服务器处理的任何url都需要该参数。请记住,有些URL已经有了自己的参数,而其他URL没有,还有根URL等等,有时它需要添加?hssc=1
或&hssc=
-因此,如果我有这样一个URL:
- 应该成为
- 应该成为
- 应该成为
- 应该成为
- 应该让他一个人呆着
\&hssc\124;\?hssc
-现在我只需要一种方法来编写URL,这样它就会出现并保留原始URL中已经存在的部分。
作为通过代码维护QS的提示:
public static string GetQS()
{
var sb = new System.Text.StringBuilder();
System.Collections.Specialized.NameValueCollection Qs = HttpContext.Current.Request.QueryString;
var lst = new List<string>(Qs.AllKeys);
foreach (string s in lst)
{
if (s == "MyOwnQSKey")
sb.Append(s + "=" + "MyValue" + "&");
else
sb.Append(s + "=" + Qs[s] + "&");
}
if (!lst.Contains("MyOwnQSKey"))
sb.Append("MyOwnQSKey=MyValue&");
if (sb.ToString().EndsWith("&"))
sb.Remove(sb.Length - 1, 1);
return "?" + sb;
}
公共静态字符串GetQS()
{
var sb=new System.Text.StringBuilder();
System.Collections.Specialized.NameValueCollection Qs=HttpContext.Current.Request.QueryString;
var lst=新列表(Qs.allkey);
foreach(lst中的字符串s)
{
如果(s==“MyOwnQSKey”)
sb.追加(s+“=”+“MyValue”+“&”);
其他的
某人附加(s+“=”+Qs[s]+“&”);
}
如果(!lst.包含(“MyOwnQSKey”))
sb.追加(“MyOwnQSKey=MyValue&”);
如果(sb.ToString().EndsWith(“&”))
移除(sb长度-1,1);
返回“?”+sb;
}
我刚刚从我的一个项目中复制了这个,这个项目和你在Url重写和QS中的项目类似
希望这有帮助
解决了这个问题-规则将按如下方式设置:
<rewrite>
<rules>
<rule name="sigh" patternSyntax="ECMAScript" stopProcessing="true">
<match url="(.*)" negate="false" />
<action type="Redirect" url="{PATH_INFO}?hssc=1" />
<conditions>
<add input="{QUERY_STRING}" pattern="^hssc=|\?hssc=|\&hssc=" negate="true" />
</conditions>
</rule>
</rules>
</rewrite>
这与我的要求有什么关系?对于复杂的情况,我建议以编程方式使用URLRewite规则。这将为您提供很多灵活性。您可以创建一个至少包含两个方法的类:一个用于在页面中创建链接,另一个用于在应用程序_BeginRequest事件中重新写入url。开发人员拥有个人库和框架总是好的,这并不是一个复杂的情况。我只想添加一个静态url参数。