문제

다음 코드를 사용하여 멋진 형식의 문자열이 나타납니다.

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")를 호출 할 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top