0

コンソール アプリケーションを使用して URL をそのパラメータから簡単に分割し、パラメータを URL エンコードできるようにしたいと考えています。これを簡単にするタイプはありますか?これは Web サーバーの外部で実行されていることに注意してください。

URL の形式は次のとおりです。

例えば

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime?PatientID=1234&param2=blah blah blah";

だから私はできる

string finalUrl = "http://sitename/folder1/someweb.dll?RetriveTestByDateTime?PatientID=" + HttpUtility.UrlEncode(PatientIDValue) + HttpUtility.UrlEncode(param2Value);

第二に、第二は?有効ですか?このデータは、サードパーティのアプリから取得されます。確かにこれは Regex で実現できますが、私のチームのほとんどの人は正規表現を知らないので、私はそれを使用したくありません。

4

2 に答える 2

4

クラスを使用しますUri- 文字列urlをコンストラクターに渡すと、さまざまな部分が解析されます。

クエリはプロパティにあり、 、およびエンコードされたQueryを使用して URL を簡単に再構築できます。SchemeAbsolutePathQuery

于 2012-07-05T21:15:53.147 に答える
0

Firstly your url structure is bad

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime?PatientID=1234&param2=blah blah blah";

should be

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime&PatientID=1234&param2=blah blah blah";

A possible solution, I'm not in a development environment now so this is from the head. Some changes may need to be done to the code.

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime&PatientID=1234&param2=blah blah blah";
var uri = new Uri(url);
var queryString = uri.Query;
NameValueCollection query = HttpUtility.ParseQueryString(queryString)
query["PatientID"] = string.Concat(HttpUtility.UrlEncode(PatientIDValue), HttpUtility.UrlEncode(param2Value));

// Rebuild the querystring
queryString = "?" + 
                 string.Join("&", 
                              Array.ConvertAll(query.AllKeys, 
                                                key => string.Format("{0}={1}", 
                                                HttpUtility.UrlEncode(key), 
                                                HttpUtility.UrlEncode(query[key]))));
于 2012-07-05T21:26:49.890 に答える