如何从 C# 中的相对 URL 字符串中获取参数?
Posted
技术标签:
【中文标题】如何从 C# 中的相对 URL 字符串中获取参数?【英文标题】:How to get the parameter from a relative URL string in C#? 【发布时间】:2016-12-03 08:49:08 【问题描述】:使用 C# 从相对 URL 字符串中获取特定参数的最有效方法是什么?
例如,您将如何从以下相对 URL 字符串中获取 ACTION
参数的值:
string url = "/page/example?ACTION=data&FOO=test";
我已经尝试过使用:
var myUri = new Uri(url, UriKind.Relative);
String action = HttpUtility.ParseQueryString(myUri.Query).Get("ACTION");
但是,我收到以下错误:
相对 URI 不支持此操作。
【问题讨论】:
你试过 Request.QueryString["ACTION"] 了吗? 如果您使用的是 asp.net,请使用QueryString property on HttpRequest。 URL 字符串来自数据库,而不是浏览器,所以我认为使用 HttpRequest 行不通? 【参考方案1】: int idx = url.IndexOf('?');
string query = idx >= 0 ? url.Substring(idx) : "";
HttpUtility.ParseQueryString(query).Get("ACTION");
【讨论】:
谢谢,使用 IndexOf 和 Substring 有效。我还没有用 URIBuilder 尝试过。 使用 UriBuilder 的第二种解决方案不适用于相对路径。它期望构造函数参数 URL 具有主机。 UriBuilder help【参考方案2】:虽然UriKind.Relative
的许多 URI 操作不可用(无论出于何种原因),但您可以通过接收基本 URI 的overloads 之一构建完全限定的 URI
这是一个例子from the docs on Uri.Query
:
Uri baseUri = new Uri ("http://www.contoso.com/");
Uri myUri = new Uri (baseUri, "catalog/shownew.htm?date=today");
Console.WriteLine(myUri.Query); // date=today
如果您只关心路径组件,您还可以从 HttpContext.Current.Request.Url
获取当前基址,或者甚至只需使用 "http://localhost"
创建一个模拟 URI 基址。
因此,以下任一方法也应该从相对路径返回 QueryString:
var path = "catalog/shownew.htm?date=today"
var query1 = new Uri(HttpContext.Current.Request.Url, path).Query;
var query2 = new Uri(new Uri("http://localhost"), path).Query;
【讨论】:
以上是关于如何从 C# 中的相对 URL 字符串中获取参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 django 视图中的绝对 url 获取相对 url?
如何从 Swift 3 xcode8 的 UIWebView 中的 url 获取查询字符串参数?