Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Переписать адрес в браузере по желанию программист


Автор: alexburzak 28.11.2007, 15:05
Какие есть программные способы, что бы переписать адрес в строке браузера?
Например было www.site.com/mypage.aspx а должно стать: www.site.com/yourpage.myhtml.
Еще раз не редерикт! А написания текста в по желанию программиста.
Есть программные способы у .NET?

Автор: Idsa 28.11.2007, 15:26
Если я правильно понял, тебе нужен url-rewriting. Его поддерживает и Apache, и IIS.

Автор: Mymik 28.11.2007, 16:20
alexburzak, почитай про httpHandler (заюзай поиск, тут много раз поднимался этот вопрос.)

Автор: alexburzak 29.11.2007, 11:57
Цитата(Mymik @ 28.11.2007,  16:20)
alexburzak, почитай про httpHandler (заюзай поиск, тут много раз поднимался этот вопрос.)

 smile 
Спасибо за подсказку. Вот нашел: http://www.15seconds.com/issue/030522.htm
Пытаюсь понять и написать свой. Оставляю за собой право уточнить детали...  smile

Добавлено через 1 минуту и 37 секунд
Вот только по этому форуму ни разу не было подобного вопроса... (rewrite url)

Автор: Mymik 29.11.2007, 13:24
alexburzak, другой запрос надо ставить...
http://forum.vingrad.ru/act-Search/CODE/show/searchid-d9e1d9c3194f2a86cc59eafa5567d9ee/search_in-posts/result_type/topics/flag/search/highlite/httphandler/index.html

Автор: alexburzak 29.11.2007, 16:29
Цитата(Mymik @ 29.11.2007,  13:24)
alexburzak, другой запрос надо ставить...
http://forum.vingrad.ru/act-Search/CODE/show/searchid-d9e1d9c3194f2a86cc59eafa5567d9ee/search_in-posts/result_type/topics/flag/search/highlite/httphandler/index.html

 smile Согласен.
Вот уткнулся, не могу понять.
Сделал в Microsoft Visual Studio 2005 Handler, назвал его RewriteNET.ashx 
Код


<%@ WebHandler Language="VB" Class="Rewrite" %>

Imports System
Imports System.Web
Namespace RewriteNET
    Public Class Rewrite : Implements IHttpModule
        
        Public Sub Rewrite_BeginRequest(ByVal sender As Object, ByVal args As System.EventArgs)
            'process rules here
        End Sub

        Public Sub Dispose() Implements System.Web.IHttpModule.Dispose

        End Sub

        Public Sub Init(ByVal Appl As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
            AddHandler Appl.BeginRequest, AddressOf Me.Rewrite_BeginRequest
        End Sub
        
    End Class
End Namespace

В web.config:
Код

      <httpModules>
        <add type="RewriteNET.Rewrite,Rewrite" name="Rewrite"/>
      </httpModules>

Все это по материалам: http://www.15seconds.com/issue/030522.htm
Получаю ошибку: "Could not create type 'Rewrite' "
Где моя ошибка?  smile 
Плиз подскажите, что я делаю не так? 

Автор: Mymik 29.11.2007, 16:43
alexburzak, это не WebHandler должен быть. А должен быть C# class который надо хранить либо в App_Code либо в bin каталоге как подключаемая сборка. Именно в эти два места стучится asp.net чтобы достать переопределенные методы 

Автор: alexburzak 29.11.2007, 23:04
Цитата(Mymik @ 29.11.2007,  16:43)
alexburzak, это не WebHandler должен быть. А должен быть C# class который надо хранить либо в App_Code либо в bin каталоге как подключаемая сборка. Именно в эти два места стучится asp.net чтобы достать переопределенные методы

Спасибо, направил на правильный путь.
Для последующих поколений: обратить внимание есть мелкие не стыковки в коде, в примере , что я привожу и в линке, что я дал!
Код

Imports System
Imports System.Web
Namespace Rewrite.NET
    Public Class Rewrite : Implements IHttpModule
        Public Sub Rewrite_BeginRequest(ByVal sender As Object, ByVal args As System.EventArgs)
            'process rules here
            'cast the sender to an HttpApplication object
            Dim Appl As System.Web.HttpApplication = CType(sender, System.Web.HttpApplication)
            'load the settings in
            Dim SimpleSettings As System.Collections.Specialized.NameValueCollection = CType(System.Configuration.ConfigurationManager.GetSection("Rewrite.NET/SimpleSettings"), System.Collections.Specialized.NameValueCollection)
            'see if we have a match
            Dim x As Integer = 0
            Do While (x < SimpleSettings.Count)
                Dim source As String = SimpleSettings.GetKey(x)
                Dim dest As String = SimpleSettings.Get(x)
                If (Appl.Request.Path.ToLower = source.ToLower) Then
                    SendToNewUrl(dest, Appl)
                    Exit Sub
                End If
                x = (x + 1)
            Loop
        End Sub
        Public Sub SendToNewUrl(ByVal url As String, ByVal Appl As System.Web.HttpApplication)
            Appl.Context.RewritePath(url)
        End Sub
        Public Sub Dispose() Implements System.Web.IHttpModule.Dispose

        End Sub
        Public Sub Init(ByVal Appl As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
            AddHandler Appl.BeginRequest, AddressOf Me.Rewrite_BeginRequest
        End Sub
    End Class
End Namespace

Код

<configuration>
  <!--Start RewriteUrl-->
  <configSections>
    <sectionGroup name="Rewrite.NET">
      <section name="SimpleSettings" type="System.Configuration.NameValueSectionHandler"/>
    </sectionGroup>
  </configSections>
  <Rewrite.NET>
    <SimpleSettings>
      <add key="/NatArt/Test.aspx" value="/NatArt/WriteMyTest.aspx" />
    </SimpleSettings>
  </Rewrite.NET>
  <!--End RewriteUrl-->
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <!--Start RewriteUrl-->
      <httpModules>
        <add type="Rewrite.NET.Rewrite" name="Rewrite.NET"/>
      </httpModules>
      <!--End RewriteUrl-->
.................

Теперь проблемы, которые не смог сам решить и надеюсь на помощь много уважаемых форумчан.
Во-первых сразу  вылезли предупреждения от web.config`a: «Message    3    Could not find schema information for the element 'add'.    C:\Inetpub\wwwroot\NatArt\web.config    19    8    C:\...\NatArt\»
Ладно, предупреждения, а не ошибки. Продолжаю работать, конечная цель рерайт адреса для пользователя. Запускаю в дебаге, вроде работает но в конце преподносит сюрприз. Просто браузер пытается перенаправить меня на эту страницу… (/NatArt/WriteMyTest.aspx), хотя я хотел ПЕРЕПИСАТЬ адрес и вызывал Appl.Context.RewritePath(url) 
Плиз скажите где здесь грабли?  smile  smile  smile  smile 

Автор: alexburzak 3.12.2007, 16:18
 smile Блин грабли у меня в голове.
Видемо совсем запрограммировался..  smile 
Все оказалось просто в "/NatArt/Test.aspx" что я хочу, что бы было написанно.
А в "/NatArt/WriteMyTest.aspx" Куда я хочу направить пользователя.
А я думал наоборот  smile (самаму себе)
Спасибо Mymik`у дал намеки на решения и + ему.
Вопрос решен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)