2016-08-14 1 views
0

最初に私が正しく意味することを説明しましょう:そこには多くの方法がありましたが、そのほとんどは文字列操作などを使用して終了します。私は、組み込み関数を使ってそのようなことを行う簡単な方法があるかどうかを知りたいと思います。URLパラメータを正しく変更するにはどうすればよいですか?

これまでのところ私はstring myNewValueURLのパラメータを変更します。

Uri myUri = new Uri(URL); 
var qs = HttpUtility.ParseQueryString(myUri.Query); 
qs["ParameterName"] = myNewValue; 

これはかなりうまく動作しません。今度はURLを新しいパラメータでstringに戻したいと思います。それを行う正しい方法は何ですか?私の元の文字列のパターンがなく、得られたパラメータをマージすると、URLが得られますか?

注:1はそれからSubstringものに文字列内の文字を見つけるために開始したときこれまでのところ、私はSubstringと、そのようなでそれを行うことができるよ、私はちょうどそれを「汚れ」を見つけます。

私は簡単です。元のURLからサブ文字列「?」までは、qs.ToString()

答えて

1

クラスは、あなたに十分なパワーを提供しますか?それはすべてを行いません(特に、それがパスを構築しません)が、行方不明のビットが記入しやすい例えば、KeyValuePair<string, string>のデフォルトToStringstring.Join()とうまく動作します。

var myUri = new Uri(url); 
var qs = HttpUtility.ParseQueryString(myUri.Query); 
qs["param1"] = "newVal1"; 

var path = string.Join("&", qs); // UriBuilder can't do this bit for you 
// But it can put the bits back together and look after oddities, 
// slashes, url encoding, etc. 
var builder = new UriBuilder(myUri) {Path = path}; 
var newUri = builder.Uri; 

余分整頓についてあなたのコードでは、これはこのような拡張メソッドに包まことができます:

public static Uri SetAttribute(this Uri uri, string key, string value) { 
    var qs = HttpUtility.ParseQueryString(uri.Query); 
    qs[key] = value; 
    return new UriBuilder(myUri) {Path = string.Join("&", qs)}.Uri; 
} 

今、元のコードは次のようになります。

Uri myUri = new Uri(URL); 
myUri.SetAttribute("ParameterName") = myNewValue; 
+0

感謝!!私は私の方法よりも好きです。あまりにも悪いことに、すべてのことをするクラスはありません...私は、URLからパラメータを置き換えることは一般的なものだと思っています... – Cher

+1

はい、そうですが、彼らは 'stringの機能を重複しないようにしました。 Join() 'と' KeyValuePair.ToString() 'を呼び出します。あなたは 'Uri'に簡単な拡張メソッドを追加してあなたのためにそれを行うことができます。 –

+1

私は[この人気のある質問](http://stackoverflow.com/q/829080/3195526)のソリューションを参照しています。私は 'UrlBuilder'が答えが書かれた時点で存在しなかったと仮定することができます。特に、この質問に対するコメントは、それが2013年に存在しなかったことを示唆している。 –

関連する問題