尝试使用string.join将字符串列表连接在一起。当我使用Separator字符串“OR”时,空格被替换为“+”,这会打破我的targetUri字符串。以下是用于加入的代码。
if (DocumentSearchListViewModel.Filter == null)
{
return "http://000.000.00.00:8080/value/value/search/json?terms=value%20OR%20value&target=TEST2&maxResults=5";
}
var targetUri = "http://000.000.00.00:8080/value/value/search/json?";
NameValueCollection termsString = System.Web.HttpUtility.ParseQueryString(string.Empty);
if (!string.IsNullOrWhiteSpace(DocumentSearchListViewModel.Filter.Keywords))
{
if (!string.IsNullOrWhiteSpace(DocumentSearchListViewModel.Filter.Author))
{
DocumentSearchListViewModel.Filter.Keywords += (" " + DocumentSearchListViewModel.Filter.Author);
}
IList<string> keywords = DocumentSearchListViewModel.Filter.Keywords.Split();
termsString["terms"] = string.Join(" OR ", keywords);
}
targetUri += termsString.ToString();
targetUri += "&target=TEST2&maxResults=";
targetUri += DocumentSearchListViewModel.Filter.MaxNumberOfResults ?? "5";
return targetUri;
我在Google上进行了很多搜索,但是找不到任何有关string.join替换字符的内容。在我的调试过程中,我能够将其缩小到使用termsString行来解决问题。
这是我输出的字符串的实际示例:terms = value1 + OR + value2 + OR + value3
如何阻止空格被+字符替换?
干杯,
詹姆斯
答案 0 :(得分:-1)
为了在服务器端获取URL解码值,您应该使用:
var encoded = "terms=value1+OR+value2+OR+value3";
var decoded = System.Web.HttpUtility.UrlDecode(encoded);
@PanagiotisKanavos,关于我之前使用%20
而不是空格的建议,请看看这个JS:
var uri1="terms=value1%20OR%20value2%20OR%20value3";
var uri2="terms=value1+OR+value+OR+value3";
document.write(decodeURIComponent(uri1));
document.write("<br/>");
document.write(decodeURIComponent(uri2));
如果你运行它,你会发现在某些情况下编码可能是敏感的。