带有没有键的 QueryString 参数的 MVC Action
给定一个类似以下的 URL:
mysite.com/view/
?http://www.youtube.com/ 是否可以捕获操作参数中的查询字符串值。
public ActionResult View(string query = "")
{
...
}
我可以通过调用 QueryString[0] 来获取该值,这很好。
当查询字符串具有如下键时,它工作正常:
mysite.com/view/?query=http://www.youtube.com/
public ActionResult View(string query = "")
{
...
}
但我试图在没有键的情况下执行此操作。
编辑:更新了问题以反映我正在做的事情。我将未编码的 URL 作为查询字符串参数传递。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可能有更简单的方法可以做到这一点,但这里有一种方法......
创建一个自定义路由处理程序。如果 URL-as-querystring 包含查询字符串本身,则获取
QueryString[0]
不太有效。因为最后一个“=”如果未编码,将被解释为查询值的开头。即
http://mysite.com/view/?http://www.youtube.com/?whatever=something
将导致something
。因此,我们自己解析 URL:
为您的路由注册处理程序:
操作:
URL 示例:
http://mysite.com/view/?http://www.youtube.com?whatever=something
... 会调用:
闻起来“有点”像滥用URL 方案,但应该可以工作。
There are probably much easier ways to do this, but here's one approach...
Make a custom route handler. Getting
QueryString[0]
won't quite work, if the URL-as-querystring includes a querystring itself. Because the last "=", if unencoded, will be interpreted as the beginning of the query value.I.e.
http://mysite.com/view/?http://www.youtube.com/?whatever=something
will result insomething
.So, instead, we parse the URL ourselves:
Register the handler for your route:
Action:
URL example:
http://mysite.com/view/?http://www.youtube.com?whatever=something
... will call:
Smells "a bit" like abuse of the URL scheme, but should work.
为什么不使用路由参数而不是查询字符串来实现呢?
然后,您可以将该值作为操作方法的参数获取,而无需使用查询字符串:
mysite.com/view/http://www.youtube.com/
Why not do it with a route parameter instead of a querystring?
You can then get the value as an argument to your action method without using the querystring:
mysite.com/view/http://www.youtube.com/