我正在處理房地產網站並使用URL路由,因此我的客戶可以在URL中顯示其地址:www.realestatewebsite.com/featured/123-Fake-St.aspx中的URL路由
不過,我是新來的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;
}
哇,當這段代碼在生產中時,大聲喊我們,所以我們可以玩SQL注入!要嚴肅認真,你不應該將WebForm/QueryString的值直接傳遞到查詢中,請使用SqlParameter()向查詢添加一個參數+特殊符號的自我驗證 – sll
正確的,我剛纔做了這個改變,但我真正的問題是如果使用try/catch語句是可以接受的,或者如果我應該對URL路由使用不同的策略。 –