URL Rewriting в ASP.NET

9 Апр
2012

Тут уже была опубликована статья на эту тему, в которой были приведены примеры контроля ссылок. Но ни один меня не устроил — то надо скачивать стороннюю библиотеку, то нельзя пользоваться паттернами. А всего-то хотелось, чтобы:
1. Никаких сторонних файлов
2. Возможность использования паттернов
3. Контроль за процессом происходит на стороне сервера, т.е. прямо в файле «.cs»
4. Хочется «регистронезависимость» без особых усилий, т.е. чтобы «/shop/32» и «/ShOp/32» возвращали одну страницу.
Такое решение было найдено на канале youtube португальского программиста «Leonardo Hofling».

Теперь подробнее о том, как этого добиться за два пункта:
1. Создадим в Вашем проекте класс UrlRewrite. В данном примере по всем виртуальным url вида «/Buy/23/4» происходит перенаправление на «/Buy.aspx?idCard=23&idGroup=4»
public class UrlRewrite : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }
    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication App = (HttpApplication)sender;
        string Url = App.Context.Request.CurrentExecutionFilePath.ToUpperInvariant();
        if (!File.Exists(App.Server.MapPath(Url)))
        {
            Url = App.Context.Request.RawUrl.ToUpperInvariant();
            List Parametrs = Url.Split('/').ToList();
            if (Url.IndexOf("/BUY") == 0)
            {
                // останутся параметры после BUY
                Parametrs.RemoveAll(el => el == "" || el == "BUY");
                if (Parametrs.Count == 2)
                    App.Context.RewritePath("~/Buy.aspx", "", "idCard=" + Parametrs[0] + "&idGroup=" + Parametrs[1]);
                else
                    App.Context.RewritePath("~/Buy.aspx");
            }
        }
    }
}

2. В web.config добавим:

    
        
            
        
    
    
        
            
        
    



Вот наглядный пример, как это работает:
P.S. В данном примере параметры виртуального url разделены «/», но Вы можете использовать любой символ.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх