суббота, 21 марта 2009 г.

URL rewritintg а точнее routing в ASP.Net 3.5

Все, что необходимо знать по этой теме прекрасно описано в статье ASP.Net routing... Goodby URL rewriting?  Криса Каванагса (Интересно правильно ли я транскрибировал его фамилию? :) 
И здесь я просто кратко повторю:

Первым делом надо добавить в проект ссылки на сборки System.Web.Routing и System.Web.Abstrations

public class WebFormRouteHandler : IRouteHandler where T : IHttpHandler, new()
{
public string VirtualPath { get; set; }

public WebFormRouteHandler(string virtualPath)
{
this.VirtualPath = virtualPath;
}

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return (VirtualPath != null)
? (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(T))
: new T();
}
}

//Этот клас необходим для работы механизма роутинга в IIS 7
public class RoutingHandler : UrlRoutingHandler
{
protected override void VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext)
{
}
}
Чтобы роутинг заработал в IIS7 Необходимо выполнить ряд дополнительных действий

  • Вставить в web.config, в раздел system.webServer в теге modules следующую строчку:


  • В сам тег modules добавить атрибут


  • И последнее в том же разделе в тег handlers добавить:



Ну и теперь для счастливой жизни нам не хватает только следующего кода в файле Global.asax

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

public static void RegisterRoutes(RouteCollection routes)
{
// Note: Change the URL to "{controller}.mvc/{action}/{id}" to enable
// automatic support on IIS6 and IIS7 classic mode

var routeHandler = new WebFormRouteHandler("~/MyPage.aspx");

routes.Add(new Route("{page}", routeHandler));
routes.Add(new Route("AccountServices/{page}", routeHandler));
routes.Add(new Route("Default.aspx", routeHandler));
}
Перед тем как использовать рекомендую так-же прочитать

Using routing with WEbforms
. Дабы спастись от злых хакеров

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

Отправить комментарий