Regex IIS重写规则以检查querystring,如果不存在则添加它

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或将其添加书签时,参数就在那里 我已经设置了匹配它的

我正在尝试创建一个IIS URL重写规则,将URL参数附加到URL。url参数为
hssc
。因此,通过服务器处理的任何url都需要该参数。请记住,有些URL已经有了自己的参数,而其他URL没有,还有根URL等等,有时它需要添加
?hssc=1
&hssc=
-因此,如果我有这样一个URL:

  • 应该成为
  • 应该成为
  • 应该成为
  • 应该成为
  • 应该让他一个人呆着
我还希望URL不应该被隐藏(就像在后台重写一样)。我需要URL显示在URL中,因此当用户复制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=|\&amp;hssc=" negate="true" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>


这与我的要求有什么关系?对于复杂的情况,我建议以编程方式使用URLRewite规则。这将为您提供很多灵活性。您可以创建一个至少包含两个方法的类:一个用于在页面中创建链接,另一个用于在应用程序_BeginRequest事件中重新写入url。开发人员拥有个人库和框架总是好的,这并不是一个复杂的情况。我只想添加一个静态url参数。