我正在为IT类开发一个项目,我需要在php页面中传递查询字符串的值,并将其读入ASP页面上的隐藏字段.
我目前正在将参数从php页面传递给ASP,但我对.NET一般都是新手.如何从字符串中获取数据并将其转换为C#中的变量?例如,如果网址是blah.com/upload?username=washington,我将如何获得"华盛顿"并将其保存到隐藏字段中?万分感谢.
Jergason
编辑
我知道这很容易.万分感谢.我的.htaccess文件中有以下内容:
RewriteCond %{QUERY_STRING} ^route\=product\/category\&path\=35\&page\=([0-9]+)$
RewriteRule ^index\.php$ http://%{HTTP_HOST}/product/category/35/page_$1? [R=301,L]
Run Code Online (Sandbox Code Playgroud)
当我输入URL时,它的行为并不像预期的那样:
http://example.com/index.php?route=product/category&path=35&page=2
Run Code Online (Sandbox Code Playgroud)
它被重写为:
http://example.com/product/category/35/page_
Run Code Online (Sandbox Code Playgroud)
有人能告诉我,我做错了吗?
谢谢,
eb_dev
我正在开发一个客户端应用程序,它使用一个宁静的服务来按名称查找公司.重要的是,我能够在查询中包含文字&符号,因为这个字符在公司名称中非常常见.
但是每当我将%26(URI转义的&符号)传递给System.Uri它时,它会将其转换回常规的&符号!仔细观察,只有两个未转换回来的字符是散列(%23)和百分比(%25).
让我们说我想搜索一家名为"Pierce&Pierce"的公司:
var endPoint = "http://localhost/companies?where=Name eq '{0}'";
var name = "Pierce & Pierce";
Console.WriteLine(new Uri(string.Format(endPoint, name)));
Console.WriteLine(new Uri(string.Format(endPoint, name.Replace("&", "%26"))));
Console.WriteLine(new Uri(string.Format(endPoint, Uri.EscapeUriString(name))));
Console.WriteLine(new Uri(string.Format(endPoint, Uri.EscapeDataString(name))));
Run Code Online (Sandbox Code Playgroud)
以上所有四种组合都返回:
http://localhost/companies?where=Name eq 'Pierce & Pierce'
Run Code Online (Sandbox Code Playgroud)
这会导致服务器端出错,因为&符号被(正确地)解释为查询arg分隔符.我真正需要它返回的是原始字符串:
http://localhost/companies?where=Name eq 'Pierce %26 Pierce'
Run Code Online (Sandbox Code Playgroud)
如何在不System.Uri完全丢弃的情况下解决此问题?我不能在最后一刻用%26替换所有的&符号,因为通常会涉及多个查询参数,我不想破坏它们的分隔符.
注意:在这个问题中讨论了类似的问题,但我特别指的是System.Uri.
我在ASP.NET MVC中有一个控制器方法,如下所示:
public ActionResult GetAlbumPictures(int albumId)
{
var album = AlbumRepo.GetSingle(albumId);
var pictures = album.Pictures;
return View(pictures);
}
Run Code Online (Sandbox Code Playgroud)
此方法的路由如下所示:
routes.MapRoute(null,
"pictures"
new { controller = "Album", action = "GetAlbumPictures" });
Run Code Online (Sandbox Code Playgroud)
用户将使用以下URL获取图片,按照相册ID进行过滤:
GET http://server/pictures?albumid=10
Run Code Online (Sandbox Code Playgroud)
但是,我想将querystring参数更改为album而不是albumid:
GET http://server/pictures?album=10
Run Code Online (Sandbox Code Playgroud)
这意味着需要将控制器方法修改为:
public ActionResult GetPictures(int album)
{
...
}
Run Code Online (Sandbox Code Playgroud)
然而,这是不理想的,因为现在的方法有一个名为参数album,其可以被混淆为Album 对象来代替ID的Album.
我的问题是,是否有任何方法配置ASP.NET MVC,以便在路由中,它将接收一个调用的查询字符串参数album,但然后将其作为albumId参数传递给控制器?
PS我知道我可以在路由表中执行此操作:
routes.MapRoute(null,
"album/{albumId}/pictures",
new { controller = "Album", action = "GetAlbumPictures" });
Run Code Online (Sandbox Code Playgroud)
但由于遗留问题,我必须使其适用于查询字符串方法.
我正在尝试使用自行开发的Web API来检索一些数据.文档全部用PHP编写.我正在看的例子是这样的:
$params = array(
'id' => 1
,'data' => array(
,'email' => 'example@hasoffers.com'
)
$url = "www.someapi.com/api?" . http_build_query( $params );
Run Code Online (Sandbox Code Playgroud)
我正在使用C#WebClient类,但我无法弄清楚如何序列化数据参数:
WebClient wc = new WebClient();
wc.QueryString["id"] = "1";
wc.QueryString["data"] = // I have no idea.
string json = wc.DownloadString(apiUrl);
Run Code Online (Sandbox Code Playgroud)
我尝试了一些变化:
wc.QueryString["data"] = "email=test@stackoverflow.com";
wc.QueryString["data"] = Uri.EscapeDataString("data[email]=test@stackoverflow.com");
wc.QueryString["data"] = Uri.EscapeDataString("email[0]=test@stackoverflow.com");
wc.QueryString["data"] = Uri.EscapeDataString("email=test@stackoverflow.com");
Run Code Online (Sandbox Code Playgroud)
当然,我没有任何地方的PHP设置来查看http_build_query()实际返回的内容.
我在包含查询字符串的静态页面上有一个打开的图元标记,每次我通过Facebook的url linter运行它时,查询值都会被删除.
例如:
http://www.site.com/?ref=23a3as3hth456
Run Code Online (Sandbox Code Playgroud)
会回来的
http://www.site.com/?ref
Run Code Online (Sandbox Code Playgroud)
奇怪的是,似乎如果值不包含任何数字,但是是纯字符串,它将注册.例如:
http://www.site.com/?ref=23a3as3hth456&sample=testing
Run Code Online (Sandbox Code Playgroud)
会回来的
http://www.site.com/?ref&sample=testing
Run Code Online (Sandbox Code Playgroud)
此外,实际页面URL包含包含相同值的查询字符串,并且当Linter回退到默认页面URL时,将保留这些值.
有没有人有任何进一步的信息?我用urlencode()编码整个URL字符串,但仍然遇到这个问题.是否有任何变通方法,或者我错过了什么?
谢谢!
我正在寻找一种方法来改变使用javascript(包含jquery)的html请求的获取查询字符串,而无需刷新页面.刷新时将继承此查询字符串.例如,http://thissite.site/index.html?id=123将是原始URL,然后发生事件并且id更改为235.刷新页面时,刷新的链接将是http://thissite.site/index.html?id=235.
是否有一个保留的查询字符串字符,通常用于忽略字符串的各个部分?像这样的东西:
?foo=bar&baz=quux*some character*&sky=blue
Run Code Online (Sandbox Code Playgroud)
在此查询字符串中添加一些字符结果,并忽略结束:
?foo=bar&baz=quux
Run Code Online (Sandbox Code Playgroud)
我知道通常由解析查询字符串的程序决定如何处理任何内容,但我想知道这样的事情是否存在与a表示空格的方式相同.
我想重写以下网址 -
http://localhost:99/Product/CategoryLevel?CategoryId=65&ProductName=Vitamins
同
http://localhost:99/Product/Vitamins,
(要么)
http://localhost:99/Product/CategoryLevel/Vitamins
(要么)
http://localhost:99/Vitamins
(或)如何从URL中删除(或)隐藏查询字符串(显示给用户)?
我尝试使用url重写模块(iis)和asp.net路由并在互联网上搜索解决方案,但我没有找到正确的解决方案,请建议任何解决方案.
asp.net-mvc url-rewriting query-string asp.net-mvc-4 url-rewrite-module
我正在一个项目中,我需要设置nginx重写规则来修改带有查询请求的url。例如:
www.abc.com/pathA/pathB/script.pl?paraA=10¶B=20
将被重写为:www.abc.com/pathA/pathB/script.pl.1020
我尝试使用变量$ args或$ query_string(基于nginx doc,它们相同)来检查url是否具有查询请求,因为我要重写。但是我发现$ args(或$ query_string)仅包含&之前的内容。
在我的示例中,这意味着$ args = paraA = 10。&之后,我无法获取参数内容。我确定此Nginx错误日志,并将其设置为调试级别。
知道为什么我在变量$ args或$ query_string中&之后无法获取查询参数吗?
先谢谢了。
query-string ×10
c# ×3
asp.net-mvc ×2
url ×2
.net ×1
arrays ×1
asp.net ×1
escaping ×1
facebook ×1
get ×1
javascript ×1
jquery ×1
meta-tags ×1
mod-rewrite ×1
nginx ×1
opengraph ×1
php ×1
refresh ×1
routing ×1
uri ×1