2017-01-24 5 views
6

aspx 페이지에서 문자열을 읽는 방법.페이지 이름을 지정하지 않고 asp.net에서 query-string을 읽는 중

예 : http://foo.com/bike 내가 읽기/지정된 영문 페이지에서 문자열을 얻으려면

서있다. 예상 페이지 문자열 자전거
예상 페이지 내가 문자열을 읽고 지정된 페이지로 리디렉션처럼 여기 getstring.aspx

입니다 스탠드입니다.
참고 : 나는 (안 MVC와 함께) 단지 ASP.Net에서이 작업을 수행 할 수

+0

당신은 쿼리 문자열 매개 변수를받을 수 있도록 리디렉션 하시겠습니까 매개 변수를 기반으로 한 페이지? –

+0

예상되는 페이지는 항상'getstring.aspx'입니까? –

+0

예 AliBaig. 쿼리 문자열을 기반으로 다른 페이지로 리다이렉트하고 싶습니다. getstring.aspx는 예제 페이지 이름 만 변경할 수 있습니다. – Sensa

답변

2

당신은이에 대한 IIS URL Rewrite Module를 사용할 수 좋아한다. 설치된 URL을 다시 작성하는 Web.Config System.Webserver 노드에 규칙을 만들면 문자열을 QueryString으로 처리 할 수 ​​있습니다.

string getString = Request.QueryString["string"]; 

을하지만 모든 요청은 이제 전송되고 있기 때문에 액세스 할 필요 이상 getstring.aspx 이외의 페이지가있을 경우 자신의 문제를 만듭니다 :

<rewrite> 
    <rules> 
    <rule name="getString" stopProcessing="true"> 
     <match url="^([a-z0-9- /]+)$" ignoreCase="true"/> 
     <action type="Rewrite" url="getstring.aspx?string={R:1}"/> 
    </rule>  
    </rules> 
</rewrite> 

그럼 당신은 단순히이와 함께 문자열 값을 얻을 수 있습니다 getstring.aspx. 아마도 문자열이있는 것으로 요청 URL을 식별 할 수 있도록 접두어를 사용하는 것이 좋습니다.

http://foo.com/getstring/bike stand 

<match url="^getstring/([a-z0-9- /]+)$" ignoreCase="true"/> 
4

아마도 Route을 사용하여이를 해결할 수 있습니다. 나는 몇 분만에 시험해 볼 수있는 간단한 데모를 만들었습니다. Global.asax.cs 파일에서이 방법을 추가 : 이미 존재하는 void Application_Start(object sender, EventArgs e) 방법으로, 동일한 파일에

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute("Products", 
     "Products/{product}", "~/getstring.aspx", 
     false, 
     new RouteValueDictionary { { "product", "NoneSelected" } } 
    ); 
} 

RegisterRoutes(RouteTable.Routes); 추가 :이

void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
} 

, 사용자가 구성한 가지고 Route을 것이다 다음과 같이 요청하십시오 :

http://foo.com/Products/bike%20stand 

getstring.aspx으로 매핑하십시오. URL에 공간을 인코딩 한 URL이 있습니다.

getstring.aspx에서이 같은 값 ("자전거 스탠드를")에 액세스 할 수 있습니다 : 나는 응용 프로그램 폴더 아래의 경로 "제품"에이 샘플에서 Route를 설정 한

protected void Page_Load(object sender, EventArgs e) 
{ 
    string routeValue = ""; 
    if (RouteData.Values.ContainsKey("product")) 
     routeValue = RouteData.Values["product"].ToString(); 

    //routeValue now contains "bike stand" 

    SelectedProduct.Text = routeValue; 
} 

. 질문과 같이 응용 프로그램 폴더 아래에 직접 경로를 설정하지 않는 것이 좋습니다. 당신은 그것을 당신은 절대적으로 원하는 수 있다면 비록에 :

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute("Products", 
     "{product}", "~/getstring.aspx", 
     false, 
     new RouteValueDictionary { { "product", "NoneSelected" } } 
    ); 
} 
3

그것은 당신의 필요를 충족하는 가장 좋은 방법을하지 않을 수 있습니다하지만 당신은 URL에서 문자열 부분을 얻으려면 당신이 URI 세그먼트를 사용할 수 있습니다.

HttpContext.Current.Request.Url.Segments.Select(x=>x.TrimEnd‌​('/')).Skip(2).ToArr‌​ay(); 

또는

new Uri("http://www.someurl.com/foo/xyz/index.htm#extra_text").Segments 

결과 : [ "/", "foo/", "xyz/", "index.html" ]

당신이 할 수있는 문자열을 읽고 나면 당신이 리디렉션 등처럼 원하는대로는