C# .NET:在重定向期间保留一些但不是所有查询参数

C# .NET:在重定向期间保留一些但不是所有查询参数,c#,asp.net,http,C#,Asp.net,Http,有人能告诉我下面的代码是否能实现我想要的,即: 检查查询字符串中是否存在查询参数“return\u path”和/或“user\u state”,如果存在,则将其附加到重定向URI的查询字符串中 由于我不是一个.NET开发人员,也没有一台服务器来测试这个,我希望有人能给我一些反馈 ArrayList vars = new ArrayList(); vars.Add("return_path"); vars.Add("user_state"); string newUrl = "/new/req

有人能告诉我下面的代码是否能实现我想要的,即: 检查查询字符串中是否存在查询参数“return\u path”和/或“user\u state”,如果存在,则将其附加到重定向URI的查询字符串中

由于我不是一个.NET开发人员,也没有一台服务器来测试这个,我希望有人能给我一些反馈

ArrayList vars = new ArrayList();
vars.Add("return_path");
vars.Add("user_state");

string newUrl = "/new/request/uri" + "?";
ArrayList params = new ArrayList();
foreach ( string key in Request.QueryString ) {
    if (vars.contains(key)) {
        params.Add(key + "=" + HttpUtility.URLPathEncode(Request.QueryString[key]));
    }
}
String[] paramArr = (String[]) params.ToArray( typeof (string) );
String queryString = String.join("&", paramArr);

Response.Redirect(newUrl);

谢谢:)

看起来它会实现你想要的。 我唯一关心的是在URL中使用原始下划线。不确定URL编码是否允许这样做。如果发现有问题,请使用连字符/减号或URL编码下划线字符

在第一次响应后添加

嗯。选中的。下划线不适用于主机名,而不适用于URL参数

下面是使用泛型和LINQ修改的代码。可能还有更简洁的语法。请记住,列表仍然只被迭代一次,因此它应该同样快

List<string> varNames = new List<string> { "return_path", "user_state" };

var args = this.Request.QueryString.AllKeys
                .Where( key => varNames.Contains( key) )
                .Select( key => key + "=" + HttpUtility.UrlEncode(Request.QueryString[key]) );

string newUrl = "/new/request/uri";
if (args.Any())
{
    newUrl += "?" + String.Join("&", args);
}

Response.Redirect(newUrl);
List varNames=新列表{“返回路径”、“用户状态”};
var args=this.Request.QueryString.AllKeys
.Where(key=>varNames.Contains(key))
.Select(key=>key+“=”+HttpUtility.UrlEncode(Request.QueryString[key]);
字符串newUrl=“/new/request/uri”;
if(args.Any())
{
newUrl+=“?”+String.Join(“&”,args);
}
重定向(newUrl);
另请注意:

  • Html编码方法的名称中没有“路径”
  • 那个?已添加到原始样本中,而与找到的参数无关
  • 如果其中一个参数名称出现两次或两次以上,则会得到一个值列表,而不仅仅是一个值
  • 重定向是一种客户端重定向,因此它会返回到指向新URL的客户端
  • Redirect抛出ThreadingException来清理工作进程(这会停止任何后续代码的执行,尽管您可以尝试/catch/最终,此特殊异常类型会自动重新启动,而不管您如何处理它)

谢谢:)我只想听听对.NET有实际经验的人的意见。我以前从未遇到过查询字符串中下划线的问题。但我是否应该注意到.NET有什么特别之处?最新回应。希望那里有更多的信息。没有发现一个方法命名问题。