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");
- 용쿼문수집을 사용하여 합니다.
HttpContext.Request.QueryString
은 기값은입니다.NameValueCollection
활자를 - 해서 으로주여사용니다합하조끈다니▁cast사▁it용합▁and를 사용합니다.
System.Web.HttpUtility.ParseQueryString()
문자열을 합니다(" " " " " " " " (" " " " " 를 합니다).NameValueCollection
다시). - 그러면 다음을 사용할 수 있습니다.
Remove()
(키를 사용하여 해당 매개 변수를 참조하여 제거) 특정 매개 변수를 제거하는 함수입니다. - 변수를 후 " " " " 를 사용합니다.
string.Join()
쿼리 문자열을 URL에서 유효한 쿼리 매개 변수로 읽을 수 있는 형식으로 지정합니다.
예제를 하십시오. 서 " 의참작조십시오하를예제아업래오시"입니다.param_to_remove
제거하려는 매개 변수입니다.
쿼리 매개 변수가 다음과 같다고 가정해 보겠습니다.param1=1¶m_to_remove=stuff¶m2=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¶m2=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, "");
쿼리 문자열을 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
'programing' 카테고리의 다른 글
ORACLE 11g의 테이블 값 함수 ? (파라미터화된 보기) (0) | 2023.07.30 |
---|---|
조각에 빈 생성자가 정말 필요합니까? (0) | 2023.07.30 |
JQuery의 파일 입력에서 데이터 가져오기 (0) | 2023.07.30 |
java System.currentTimeMillis()에 해당하는 Oracle? (0) | 2023.07.30 |
"식 유형이 잘못됨"에서 부울 반환 함수가 실패함 (0) | 2023.07.30 |