2017-01-24 16 views
6

Jak odczytać ciągi na stronie aspx.Czytanie łańcucha zapytania w asp.net bez określania nazwy strony

przykład: http://foo.com/bike stać

chcę czytać/dostać za sznurki w podanej strony aspx. spodziewać strona ciąg jest rower stać
spodziewać strona jest getstring.aspx

Tutaj lubię czytać ciąg i przekierować do podanej strony.
Uwaga: lubię robić to tylko w ASP.Net (nie MVC)

+0

Chcesz uzyskać parametry ciąg kwerendy i przekierować do strona na podstawie parametru? –

+0

Oczekiwana strona to zawsze 'getstring.aspx'? –

+0

Tak AliBaig. na podstawie ciągu zapytania lubię przekierowywać to samo na inną stronę. a getstring.aspx to tylko przykładowa nazwa strony, którą można zmienić. – Sensa

Odpowiedz

2

Można użyć IIS URL Rewrite Module do tego. Po zainstalowaniu można utworzyć regułę w węźle Web.Config System.Webserver, która zmienia adres URL, aby ciąg mógł zostać przetworzony w kodzie za QueryString.

<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> 

Następnie można po prostu uzyskać wartość ciągu z tym:

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

ale jego stworzy problem, jeśli istnieje stronach innych niż getstring.aspx niż muszą być dostępne, ponieważ każdy wniosek jest obecnie wysłać do getstring.aspx. Może lepiej użyć prefiksu, aby zidentyfikować adres URL żądania jako taki, który ma ciąg znaków.

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

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

Prawdopodobnie można rozwiązać ten problem za pomocą Route. Zrobiłem proste demo, które możesz wypróbować za kilka minut. W pliku Global.asax.cs, dodać tę metodę:

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

w tym samym pliku, w już istniejącym void Application_Start(object sender, EventArgs e) metodzie dodać RegisterRoutes(RouteTable.Routes);:

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

Z tym, skonfigurowaniu Route który zajmie żądanie takie jak to:

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

i zamapuj je na getstring.aspx. Zauważ, że adres URL zakodowany jest w adresie URL.

W getstring.aspx można uzyskać dostęp do wartości („stand rower”) tak:

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; 
} 

mam skonfigurować Route w tej próbce na ścieżce „Produkty” pod folderze aplikacji. Nie polecam konfigurowania trasy bezpośrednio pod folderem aplikacji, jak w pytaniu. Ci może zrobić jednak, jeśli absolutnie chcą:

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

To może nie najlepszy sposób, aby spełnić swoje potrzeby, ale jeśli chcesz dostać część ciąg z URL można użyć segmenty URI.

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

LUB

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

Wyniki: [ "/", "foo/", "xyz/", "index.html" ]

Po przeczytaniu ciąg można robić, co chcesz jak przekierowania itp

Powiązane problemy