programing

c#을 사용하여 asp.net 의 쿼리 문자열에서 항목을 제거하려면 어떻게 해야 합니까?

i4 2023. 7. 30. 17:04
반응형

c#을 사용하여 asp.net 의 쿼리 문자열에서 항목을 제거하려면 어떻게 해야 합니까?

URL에서 "Language" 쿼리 문자열을 제거하고 싶습니다.어떻게 해야 하나요?(Asp.net 3.5, c# 사용)

Default.aspx?Agent=10&Language=2

"Language=2"를 제거하고 싶지만 언어가 처음, 중간 또는 마지막이 될 것입니다.그래서 저는 이것을 가질 것입니다.

Default.aspx?Agent=20

HttpRequest라면.QueryString을 사용하면 컬렉션을 쓰기 가능한 컬렉션으로 복사하여 원하는 대로 사용할 수 있습니다.

NameValueCollection filtered = new NameValueCollection(request.QueryString);
filtered.Remove("Language");

여기 간단한 방법이 있습니다.리플렉터가 필요하지 않습니다.

    public static string GetQueryStringWithOutParameter(string parameter)
    {
        var nameValueCollection = System.Web.HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
        nameValueCollection.Remove(parameter);
        string url = HttpContext.Current.Request.Path + "?" + nameValueCollection;

        return url;
    }

여기서QueryString.ToString()다음과 같은 이유로 필요합니다.Request.QueryString컬렉션이 읽기 전용입니다.

마침내.

hmemcpy 대답은 전적으로 저를 위한 것이었고 대답해준 다른 친구들 덕분이었습니다.

리플렉터를 사용하여 HttpValueCollection을 가져다가 다음 코드를 작성했습니다.

        var hebe = new HttpValueCollection();
        hebe.Add(HttpUtility.ParseQueryString(Request.Url.Query));

        if (!string.IsNullOrEmpty(hebe["Language"]))
            hebe.Remove("Language");

        Response.Redirect(Request.Url.AbsolutePath + "?" + hebe );

여기서 제 개인적인 선호는 쿼리를 다시 작성하거나 낮은 지점에서 이름 값 수집 작업을 하는 것입니다. 하지만 비즈니스 논리로는 이러한 작업 중 어느 것도 그다지 도움이 되지 않을 때가 있으며, 때로는 반성이 정말로 필요한 경우도 있습니다.이러한 상황에서는 다음과 같이 읽기 전용 플래그를 잠시만 해제할 수 있습니다.

// reflect to readonly property
PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);

// make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);

// remove
this.Request.QueryString.Remove("foo");

// modify
this.Request.QueryString.Set("bar", "123");

// make collection readonly again
isreadonly.SetValue(this.Request.QueryString, true, null);

저는 얼마 전에 비슷한 질문에 답했습니다.기본적으로, 가장 좋은 방법은 수업을 이용하는 것입니다.HttpValueCollection어느 것이QueryString재산은 실제로, 불행하게도 그것은 내부에 있습니다.NET 프레임워크.Reflector를 사용하여 이를 가져와 Utils 클래스에 배치할 수 있습니다.이렇게 하면 NameValueCollection과 같이 쿼리 문자열을 조작할 수 있지만 URL 인코딩/디코딩 문제는 모두 해결됩니다.

HttpValueCollection 확된장NameValueCollection 는 쿼리 문자열( 및 포함)을, 는 " " " " " " " " (" (" " " " " " " " " " " " 를 합니다.ToString()나중에 기본 컬렉션에서 쿼리 문자열을 재구성하는 방법입니다.

사용해 보십시오...

PropertyInfo isreadonly   =typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);    

isreadonly.SetValue(this.Request.QueryString, false, null);
this.Request.QueryString.Remove("foo");
  1. 용쿼문수집을 사용하여 합니다.HttpContext.Request.QueryString은 기값은입니다.NameValueCollection활자를
  2. 해서 으로주여사용니다합하조끈다니▁cast사▁it용합▁and를 사용합니다.System.Web.HttpUtility.ParseQueryString()문자열을 합니다(" " " " " " " " (" " " " " 를 합니다).NameValueCollection다시).
  3. 그러면 다음을 사용할 수 있습니다.Remove()(키를 사용하여 해당 매개 변수를 참조하여 제거) 특정 매개 변수를 제거하는 함수입니다.
  4. 변수를 후 " " " " 를 사용합니다.string.Join()쿼리 문자열을 URL에서 유효한 쿼리 매개 변수로 읽을 수 있는 형식으로 지정합니다.

예제를 하십시오. 서 " 의참작조십시오하를예제아업래오시"입니다.param_to_remove제거하려는 매개 변수입니다.

쿼리 매개 변수가 다음과 같다고 가정해 보겠습니다.param1=1&param_to_remove=stuff&param2=2다음 행을 실행합니다.

var queryParams = System.Web.HttpUtility.ParseQueryString(HttpContext.Request.QueryString.ToString());
queryParams.Remove("param_to_remove");
string queryString = string.Join("&", queryParams.Cast<string>().Select(e => e + "=" + queryParams[e]));

이제 쿼리 문자열은 다음과 같아야 합니다.param1=1&param2=2.

요청 개체에서 쿼리 문자열을 수정하려고 하는지 여부를 명확히 알 수 없습니다.해당 속성은 읽기 전용이므로 문자열을 잘못 입력한 것으로 간주됩니다.

그런 경우에는, 그것은 사소한 것입니다.

  • 요청에서 쿼리 문자열을 가져옵니다.
  • .'&'에 표시합니다.
  • "언어"로 시작하는 모든 것을 냄새 맡고 버리는 동안 그것을 다시 새로운 끈으로 묶습니다.

쿼리 문자열 컬렉션을 가져와 다음으로 구문 분석합니다.name=value pair제거할 문자열을 제외한 문자열을 newQueryString으로 지정합니다.

그럼 전화해요Response.Redirect(known_path?newqueryString);

정규식을 사용하여 쿼리 문자열에서 제거할 매개 변수를 찾은 다음 매개 변수를 제거하고 브라우저를 새 쿼리 문자열이 있는 동일한 파일로 리디렉션할 수 있습니다.

예, 에 기본 제공되는 클래스가 없습니다.쿼리 문자열을 편집하는 NET.정규식을 사용하거나 문자열 자체를 변경하는 다른 방법을 사용해야 합니다.

쿼리 문자열이 이미 문자열로 있는 경우 간단한 문자열 조작도 사용할 수 있습니다.

int pos = queryString.ToLower().IndexOf("parameter=");
if (pos >= 0)
{
    int pos_end = queryString.IndexOf("&", pos);
    if (pos_end >= 0)   // there are additional parameters after this one
        queryString = queryString.Substring(0, pos) + queryString.Substring(pos_end + 1);
    else
        if (pos == 0) // this one is the only parameter
            queryString = "";
        else        // this one is the last parameter
            queryString=queryString.Substring(0, pos - 1);
}

저는 간단한 해결책을 가지고 있지만, 약간의 자바스크립트 관련이 있습니다.

쿼리 문자열이 "ok=1"이라고 가정합니다.

    string url = Request.Url.AbsoluteUri.Replace("&ok=1", "");
   url = Request.Url.AbsoluteUri.Replace("?ok=1", "");
  Response.Write("<script>window.location = '"+url+"';</script>");
string queryString = "Default.aspx?Agent=10&Language=2"; //Request.QueryString.ToString();
string parameterToRemove="Language";   //parameter which we want to remove
string regex=string.Format("(&{0}=[^&\s]+|{0}=[^&\s]+&?)",parameterToRemove);
string finalQS = Regex.Replace(queryString, regex, "");

https://regexr.com/3i9vj

쿼리 문자열을 NameValueCollection으로 구문 분석합니다.항목을 제거합니다.그리고 toString을 사용하여 다시 쿼리 문자열로 변환합니다.

using System.Collections.Specialized;

NameValueCollection filteredQueryString = System.Web.HttpUtility.ParseQueryString(Request.QueryString.ToString());
filteredQueryString.Remove("appKey");

var queryString = '?'+ filteredQueryString.ToString();

ASP.NET Core(네이티브, 추가 라이브러리를 참조할 필요 없음)

ASP 내에서.요청 인스턴스에 액세스할 수 있는 NET 코어 컨트롤러

  • 부탁한다.쿼리는 쿼리 매개 변수를 나타내는 쿼리 컬렉션으로, 목록에 캐스트합니다.

  • 원하는 매개 변수를 필터링하고 제거할 수 있습니다.

  • QueryString을 사용합니다.방금 필터링한 목록을 입력으로 사용하고 쿼리 문자열을 직접 생성할 수 있는 만들기

     var removeTheseParams = new List<string> {"removeMe1", "removeMe2"}.AsReadOnly();
    
     var filteredQueryParams = Request.Query.ToList().Where(filterKvp => !removeTheseParams.Contains(filterKvp.Key));
     var filteredQueryString = QueryString.Create(queryParamsFilteredList).ToString();
    
     //Example: Console.Writeline(filteredQueryString) will give you "?q1=v1&q2=v2"
    

아래 옵션 부품: 안전하지 않은 경우 이러한 값을 인코딩할 수도 있습니다. 따라서 위의 UrlEncode() 외에도 아래와 같이 Select()를 사용하여 쿼리 매개 변수 키와 값을 인코딩합니다.

     //Optional
     .Select(cleanKvp => new KeyValuePair<string, string?>(UrlEncoder.Default.Encode(cleanKvp.Key),UrlEncoder.Default.Encode(cleanKvp.Value)))

언급URL : https://stackoverflow.com/questions/529551/how-can-i-remove-item-from-querystring-in-asp-net-using-c

반응형