.aspx中的URL路由

时间:2011-08-15 19:13:40

标签: c# asp.net url-routing

我正在开发一个房地产网站并使用URL路由,因此我的客户可以让他们的特色属性在URL中显示他们的地址:www.realestatewebsite.com/featured/123-Fake-St

但是,我是URL路由的新手,我认为我的捷径很差。我原本喜欢使用我的数据库的主键来访问属性(propID),但不想将它传递给URL,因此使用地址来获取propID并从那里使用它。但是,如果我尝试将Page.RouteData.Values [“address”]分配给字符串,并且URL中没有地址则会抛出异常。因此我有一个try / catch语句来处理它。这对我来说似乎是不好的做法。如果有人能告诉我这是否可以接受,或者有更好的解决方案,请告诉我。

以下是Global.asax:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("", "Featured/{address}", "~/Featured/Default.aspx");
}

以下是来自www.website/com/Featured/Default.aspx的方法:

protected int getPropID()
{
    string address;
    int propID = -1; //If the method returns -1 the page just lists all featured properties

    try
    {
        address = Page.RouteData.Values["address"].ToString();
    }
    catch (Exception ex)
    {
        return propID;
    }

    if (address != null)
    {
        string strSQL = "SELECT propID FROM tblFeatured WHERE address = '" + address + "'";
        DataTable dt = da.FillDataTable(strSQL);
        if (dt.Rows.Count > 0)
            propID = Convert.ToInt32(dt.Rows[0]["propID"]);
        return propID;
    }
    else
        return propID;
}

3 个答案:

答案 0 :(得分:2)

你正以典型的方式接近这一点。 Scott Gu's URL Routing with ASP.NET 4显示您使用的完全相同的模式。

  • 设置路线
  • 确保令牌位于某处的网址
  • 在目标.aspx页面的页面加载时,抓取令牌,查询数据库。
  • 根据需要显示您的标记

如果您正在寻找建议:

  • 每个属性都应在数据库中预先提取“slug”或令牌。只是要查询的另一个属性,而不是数字标识符。 DataTable没有太多帮助。
  • 将您的令牌保留为街道地址(如果您的客户不介意,可能包括SEO果汁的城市)
  • 使用该令牌查找数据库中的house / property记录。此时忘记数字ID。选择令牌匹配的属性,并将其写入页面。 Perf差异为零。
string propertyToken =  Page.RouteData.Values["address"].ToString();

Property p = PropertyDatabase.GetSingleByToken(propertyToken);

if(p!=null)
{
    WritePropertyToPage(p);
}
else
{
    //write to page that token wasn't found/misspelled/expired/etc.
}

答案 1 :(得分:0)

你看过ASP.NET MVC Routing Overview (C#)了吗?这是我建议在哪里看的虽然ASP.NET MVC Framework (Part 2): URL Routing也有一些提示可能值得在某种程度上检查,因为你在某种意义上几乎有一些RESTful。在尝试使用Web表单解决方案之前,至少这是我要考虑的。

答案 2 :(得分:0)

你的直觉是正确的,当Page.RouteData.Values [“address”]未定义时抛出是不好的做法 - 特别是因为它不存在是完全合理的。

在对对象进行方法调用之前测试null始终是一种好习惯。您可能还会考虑合并运算符?? (见http://msdn.microsoft.com/en-us/library/ms173224.aspx),虽然有些人认为它很丑陋和/或难以阅读。

相关问题