如何从C#中的相对URL字符串中获取参数?

Wel*_*ing 5 c# regex asp.net parsing

使用C#从相对URL字符串获取特定参数的最有效方法是什么?

例如,如何ACTION从以下相对URL字符串中获取参数的值:

string url = "/page/example?ACTION=data&FOO=test";
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用:

var myUri = new Uri(url, UriKind.Relative);
String action = HttpUtility.ParseQueryString(myUri.Query).Get("ACTION");
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

相对URI不支持此操作.

ale*_*exm 7

 int idx = url.IndexOf('?');
 string query = idx >= 0 ? url.Substring(idx) : "";
 HttpUtility.ParseQueryString(query).Get("ACTION");
Run Code Online (Sandbox Code Playgroud)

  • 使用UriBuilder的第二个解决方案不适用于相对路径.它期望构造函数参数URL具有主机.[UriBuilder帮助](https://msdn.microsoft.com/en-us/library/y868d5wh(v = vs.110).aspx) (7认同)

Kyl*_*Mit 5

虽然许多 URI 操作因UriKind.Relative(无论出于何种原因)不可用,但您可以通过接受 Base URI的重载之一构建完全限定的URI

这是文档中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
Run Code Online (Sandbox Code Playgroud)

如果您只关心路径组件,您还可以从HttpContext.Current.Request.Url或什至创建一个模拟 URI 基础,以获取当前基础"http://localhost"

因此,以下任一方法还应从相对路径返回 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;
Run Code Online (Sandbox Code Playgroud)