2017-01-24 6 views
6

Как читать строки на странице aspx.Чтение строки запроса в asp.net без указания имени какой-либо страницы

пример: http://foo.com/bike стоять

Я хочу прочитать/получить строки в заданной странице ASPX. ожидается строка страницы велосипеда стенда
ожидается страница getstring.aspx

Здесь я хотел бы прочитать строку и перенаправлять на указанную страницу.
Примечание: Я хотел бы сделать это всего ASP.Net (не с MVC)

+0

вы хотите, чтобы получить параметры строки запроса и перенаправления, что страница на основе параметра? –

+0

Ожидаемая страница всегда 'getstring.aspx'? –

+0

Да AliBaig. на основе строки запроса мне нравится перенаправить ее на другую страницу. и getstring.aspx - это просто имя страницы примера, которое можно изменить. – Sensa

ответ

2

Вы можете использовать IIS URL Rewrite Module для этого. При установке вы можете создать правило в узле Web.Config System.Webserver, который переписывает URL-адрес, чтобы строка могла обрабатываться в коде позади как 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> 

Тогда вы можете просто получить значение строки с этим:

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

Но его будет создавать проблемы, если есть и другие страницы, чем getstring.aspx, чем необходимость быть доступны, так как каждый запрос в настоящее время отправки to getstring.aspx. Может быть, лучше использовать префикс, чтобы вы могли идентифицировать URL-адрес запроса как строку с строкой.

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

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

Возможно, вы решите это, используя Route. Я сделал простую демонстрацию, которую вы можете попробовать всего за пару минут. В файле Global.asax.cs, добавьте этот метод:

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

В том же файле, в уже существующем void Application_Start(object sender, EventArgs e) методе, добавьте 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 вы можете получить доступ к значению («велосипед стенд»), как это:

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

Я настроил Route в этом примере на пути «Продукты» под папку приложения. Я не рекомендую настраивать маршрут непосредственно в папке приложения, как в вопросе. Вы можете сделать это, хотя, если вы абсолютно хотите:

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

После прочтения строки вы можете делать все, что вы хотите, как перенаправление и т.д.