我在。net中有一个字符串,实际上是一个URL。我想要一种简单的方法从特定的参数中获取值。

通常,我只使用Request。Params["theThingIWant"],但是这个字符串不是来自请求。我可以像这样创建一个新的Uri项:

Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);

我可以使用myUri。查询以获取查询字符串…但显然我得找个雷克斯风的方法把它分开。

我是否遗漏了一些明显的东西,或者是否没有内置的方法来创建某种类型的正则表达式,等等?


当前回答

这可能就是你想要的

var uri = new Uri("http://domain.test/Default.aspx?var1=true&var2=test&var3=3");
var query = HttpUtility.ParseQueryString(uri.Query);

var var2 = query.Get("var2");

其他回答

这其实很简单,对我来说很管用:)

        if (id == "DK")
        {
            string longurl = "selectServer.aspx?country=";
            var uriBuilder = new UriBuilder(longurl);
            var query = HttpUtility.ParseQueryString(uriBuilder.Query);
            query["country"] = "DK";

            uriBuilder.Query = query.ToString();
            longurl = uriBuilder.ToString();
        } 

我用过,运行得很好

<%=Request.QueryString["id"] %>

单线LINQ解决方案:

Dictionary<string, string> ParseQueryString(string query)
{
    return query.Replace("?", "").Split('&').ToDictionary(pair => pair.Split('=').First(), pair => pair.Split('=').Last());
}

或者,如果您不知道URL(为了避免硬编码,请使用AbsoluteUri

例子……

        //get the full URL
        Uri myUri = new Uri(Request.Url.AbsoluteUri);
        //get any parameters
        string strStatus = HttpUtility.ParseQueryString(myUri.Query).Get("status");
        string strMsg = HttpUtility.ParseQueryString(myUri.Query).Get("message");
        switch (strStatus.ToUpper())
        {
            case "OK":
                webMessageBox.Show("EMAILS SENT!");
                break;
            case "ER":
                webMessageBox.Show("EMAILS SENT, BUT ... " + strMsg);
                break;
        }
HttpContext.Current.Request.QueryString.Get("id");