我正在编写一个方法,假设给定 1
和 hello
应该返回 http://something.com/?something=1&hello=en
.
我可以很容易地将它们组合在一起,但是 ASP.NET 3.5 为构建 URI 提供了哪些抽象功能?我想要类似的东西:
URI uri = new URI("~/Hello.aspx"); // E.g. ResolveUrl is used here
uri.QueryString.Set("something", "1");
uri.QueryString.Set("hello", "en");
return uri.ToString(); // /Hello.aspx?something=1&hello=en
我找到了
Uri
听起来高度相关的类(class),但我找不到任何真正做到上述内容的类(class)。有任何想法吗?(对于它的值(value),参数的顺序对我来说并不重要。)
最佳答案
编辑以纠正大量不正确的代码
基于 this answer对于类似的问题,您可以轻松地执行以下操作:
UriBuilder ub = new UriBuilder();
// You might want to take more care here, and set the host, scheme and port too
ub.Path = ResolveUrl("~/hello.aspx"); // Assumes we're on a page or control.
// Using var gets around internal nature of HttpValueCollection
var coll = HttpUtility.ParseQueryString(string.Empty);
coll["something"] = "1";
coll["hello"] = "en";
ub.Query = coll.ToString();
return ub.ToString();
// This returned the following on the VS development server:
// http://localhost/Hello.aspx?something=1&hello=en
这也会对集合进行 urlencode,因此:
coll["Something"] = "1";
coll["hello"] = "en&that";
将输出:
Something=1&hello=en%26that
关于ASP.NET:URI 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1748609/