AsP.NET 4.0 URL-маршрутизация - PullRequest
       35

AsP.NET 4.0 URL-маршрутизация

2 голосов
/ 05 апреля 2011

Я пробую новую функцию .NET 4.0 - маршрутизацию URL, но не могу получить информацию, переданную в URL.Ниже приведен код:

GLOBAL.ASPX.CS

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

    private void SetRouting(RouteCollection routeCollection)
    {
        routeCollection.MapPageRoute("Company",
        "Company/{CompanyName}",
        "~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "CompanyName", "?CompanyName" } });

        routeCollection.MapPageRoute("Deal",
        "Company/{CompanyName}/{DealName}",
        "~/Asset/RequestForm.aspx", true, new RouteValueDictionary { { "DealName", "?DealName" } });
        routeCollection.MapPageRoute("ClientRoute",
        "Client/{ClientCompanyName}",
        "~/User/Login.aspx", true, new RouteValueDictionary { { "ClientCompanyName", "?ClientCompanyName" } });
    }

Login.aspx:

    private string CompanyName { 
        get
        {
            if (Page.RouteData.Values["ClientCompanyName"] == null)
            {
                return null;
            }
            return Page.RouteData.Values["ClientCompanyName"].ToString();
        } 
    }

Теперь указанное выше свойство возвращает ноль, даже когда я использую Клиент/ Google в URL.Когда я сбрасываю IIS (IIS 6) и делаю это впервые, он возвращает значение.В противном случае это дает ноль.

ЛЮБОЙ КЛЕЙ ??

1 Ответ

0 голосов
/ 06 апреля 2011
routeCollection.MapPageRoute("ClientRoute", 
                             "Client/{ClientCompanyName}",         
                             "~/User/Login.aspx", 
                             true, 
                             new RouteValueDictionary {{ "ClientCompanyName", "?ClientCompanyName"}};

Это на самом деле не имеет особого смысла. RouteValueDictionary используется для указания значения по умолчанию для использования, учитывая, что значение «ClientCompanyName» в URL-адресе не указано. Здесь вы говорите, что хотите, чтобы "? ClientCompanyName" было значением по умолчанию. Так, например, если вы перешли на http://baseUrl/Client,, по умолчанию это будет http://baseUrl/Client/?ClientCompanyName (буквально). Я думаю, что вы действительно хотите изменить? ClientCompanyName на фактическое "реальное" название компании, которое вы хотите использовать по умолчанию. Мое предложение было бы не иметь значение по умолчанию в этом случае и просто использовать переопределение MapPageRoute с 3 параметрами (строка, строка, строка). Я обнаружил, что во многих случаях этого достаточно. Кроме того, вот метод расширения, который вы можете использовать для объекта Request, который может вам помочь:

public static string GetDataFromRouteOrRequest(this HttpRequest request, string key)
{
    if (request.RequestContext.RouteData.Values.ContainsKey(key))
        return request.RequestContext.RouteData.Values[key].ToString();

    return request[key];
}
...