如何从 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 字符串中获取参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从c#中的url获取子字符串或字符串的一部分

如何从 django 视图中的绝对 url 获取相对 url?

如何从 Swift 3 xcode8 的 UIWebView 中的 url 获取查询字符串参数?

如何从谷歌文本到 PHP 中的语音 API 中的 URL 参数获取性别声音?

ASP.NET如何获取url参数

C# JSON URL 获取数据