C#에서 조작 된 쿼리 스트링을 출력
-
04-07-2019 - |
문제
다음 코드를 사용하여 멋진 형식의 문자열이 나타납니다.
Request.QueryString.ToString
나에게 다음과 같은 것을 준다 : & hello = worldµsoft = selks
그러나이 코드를 사용하여 컬렉션을 다른 객체 (동일한 유형)로 복제하면 toString () 메소드에서 type ()를 다시 얻습니다.
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Response.Write(variables.ToString());
문자열을 수동으로보고 구축하는 대신 출력 할 수있는 더 깔끔한 방법이 있습니까?
해결책
반사기를 사용하여 추출 할 수도 있습니다 HttpValueCollection
자신의 수업을하고 사용하십시오.
다른 팁
httpvaluecollection은 내부이지만 "var"를 사용하여 리플렉터로 추출하지 않고 선언 할 수 있습니다.
var query = HttpUtility.ParseQueryString(Request.Url.Query);
query["Lang"] = myLanguage; // Add or replace param
string myNewUrl = Request.Url.AbsolutePath + "?" + query;
실제로 httpvaluecollection 유형 인 특별한 NVC이기 때문입니다. 따라서 .TOSTRING을 호출하면 올바르게 포맷하는 방법을 알고 있습니다.
QueryString 컬렉션을 새로운 NameValueCollection으로 복사하려는 이유는 무엇입니까?
if (!string.IsNullOrEmpty(Request.QueryString["sid"]))
Request.QueryString.Remove("sid");
그렇습니다. 사실, 나는 틀 렸습니다. 독서 만 읽습니다. 따라서 본질은 NameValueCollection에서 제거 메소드를 사용하는 것입니다.
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
이름 valuecollection이 절대적으로 필요하지 않으면 사전은 많은 의미를 제공합니다.
var variables = Request.QueryString.OfType<DictionaryEntry>()
.Where(entry => entry.Key != "sid")
.ToDictionary(entry => entry.Key, entry => entry.Value);
request.querystring 실제로 httpvaluecollection 객체를 반환합니다.
그럼에도 불구하고, httpvaluecollection은 namevaluecollection에서 파생되며 remove () 메소드는 그대로 유지되므로 request.querystring.remove ( "sid")를 호출 할 수 있어야합니다.