2011-09-08 80 views
0

我需要解決在asp.net 4.0中使用路由功能進行url重寫的問題。 當用戶鍵入URL喜歡解析URL重寫的查詢字符串asp.net 4.0

www.mysite.com/product.aspx?id=101

然後右頁顯示,但想如果我更改頁面位置和名稱,當用戶鍵入網址像

www.mysite.com/product.aspx?id=101

然後會出現找不到網頁的錯誤。

所以請告訴我如何使用asp.net 4.0路由功能來解決這種情況。 有可能嗎?

我處理程序路由和喜歡我的示例代碼

void Application_Start(object sender, EventArgs e) 
    { 
     // Code that runs on application startup 
     RouteTable.Routes.MapPageRoute 
       ("Source", "Source/{ID}/{Title}", "~/Source.aspx"); 
     RouteTable.Routes.MapPageRoute 
       ("Source1", "MyData/Source/{ID}/{Title}", "~/MyData/Source.aspx"); 
    } 

上面的代碼只是樣品,我這樣做的URL重寫。這很容易。 但是,如果我需要解決我的路由上面的URL映射問題,那麼我怎麼能這樣做以及我需要在Application_Start事件中寫什麼樣的代碼。

我想,當用戶類型

www.mysite.com/product.aspx?id=101

那麼它應該重定向到

www.mysite.com /prod/Myproduct.aspx?prodid=101

此網址。所以請指導我如何在asp.net 4.0路由功能的幫助下完成這種映射。

回答

2

您可以路由到包含查詢字符串的路徑的唯一方法是使用自定義處理程序。默認情況下,路由傳遞RouteData中的變量。

所以你有3個選項。

1)編寫一個自定義的路由處理程序來重寫路徑並將其添加到查詢字符串中。我爲this in this question寫了一些類似代碼的代碼。

2)更新MyProduct.aspx在查詢字符串檢查產品id如果prodid未發現和使用MapPageRoute(新頁面具有訪問原始查詢字符串)。

RouteTable.Routes.MapPageRoute(
        "product", 
        "product.aspx", 
        "~/prod/myproduct.aspx"); 

3)使用IIS7重寫規則

<rewrite> 
    <rules> 
     <rule name="product"> 
      <match url="product.aspx?id=([0-9]+)" /> 
      <action type="Rewrite" url="prod/myproduct.aspx?prodid={R:1}" /> 
     </rule> 
    </rules> 
</rewrite> 
+0

感謝...ü給product.aspx/{*}的Prodid。爲什麼* *的含義是什麼。也告訴我們可以使用什麼其他標誌。 –

+0

我收到*的錯誤。錯誤文本是「一個全部收集參數只能顯示爲路由URL的最後一部分。 參數名稱:routeUrl「請指導我解決它 –

+0

對不起,我得到了選項2錯誤,我正在考慮一個不同的場景 - 我已經更新,'*'使最後一個參數匹配最後一個參數分割。 – TheCodeKing