.net 4.0 Маршрутизиране с QueryStrings

Осъзнавам, че има много статии и ресурси по тази тема, но всички изглежда само показват как да преместите низ на заявка като category=shoes около URL адреса на различно място, като това продукти/{категория}

Ами имам следния низ за заявка: profile.aspx?q=98c2b15f-90c3-4a7f-a33f-0e34b106877e

Опитвах се да внедря RoutHandler, за да направя запитване до DB, за да намеря името на потребителите и да създам url като mydomain.com/usersname

Това е, което опитах (в момента всичко е твърдо кодирано, докато не заработи):

void Application_Start(object sender, EventArgs e)
{
    RegisterRoute(System.Web.Routing.RouteTable.Routes);
}

void RegisterRoute(System.Web.Routing.RouteCollection routes)
{
    routes.Add("Profiles", new System.Web.Routing.Route("profile/{profile}", new RouteHandler()));
}

И това е класът манипулатор:

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
    string username = requestContext.RouteData.Values["profile"] as string;

    HttpContext.Current.Items["q"] = "98c2b15f-90c3-4a7f-a33f-0e34b106877e";
    return BuildManager.CreateInstanceFromVirtualPath("~/pub/profile.aspx", typeof(Page)) as Page;
}

Profile.aspx всъщност търси низа на заявката "q". И с горната настройка не го намира.

какво правя грешно Как да маршрутизирам или пренапиша URL адреса, така че да е красив + да го запазя, така че страницата да може да намери нужните низове на заявки?

Всяка помощ би била чудесна. Благодаря предварително.


person Nugs    schedule 03.02.2012    source източник


Отговори (1)


Първо нещо - Ако използвате .net framework 4, не е необходимо да създавате манипулатор, можете директно да използвате метода MapPageRoute към маршрут.

Отговор на вашия въпрос - използването може да използва цикъл foreach като по-долу в манипулатора, вместо да търси специално "профил".

    foreach (var urlParm in requestContext.RouteData.Values)
         requestContext.HttpContext.Items[urlParm.Key] = urlParm.Value;

    return BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler

и във вашата маршрутизирана страница трябва да проверите за

    string userName = this.Context.Items["profile"].ToString();       // "userName" and is set as route parameters in Global.asax

Задавате VirtualPath в конструктора на RouteHandler

 RouteHandler(string virPath)
    {
        this.VirtualPath = virPath;
    }

вижте тези връзки за повече информация - http://www.codeproject.com/Articles/77199/URL-Routing-with-ASP-NET-4-0 http://msdn.microsoft.com/en-us/library/ie/cc668201.aspx

person DotNetUser    schedule 03.02.2012