2013-10-12 44 views
1

我想用查詢字符串重寫URL。下面是一個例子想要只顯示查詢字符串在url路由asp.net

www.test.com/user.aspx?Name=1234

我想重寫像

www.test.com/1234

這是工作的罰款與www.test.com?Name=1234www.test.com/test/1234

我做它喜歡:

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    RouteTable.Routes.MapPageRoute("StoreRoute", 
     "{Name}", 
     "~/Webpages/Test/Demo.aspx"); 
} 

回答

0
public class Global : System.Web.HttpApplication 
{ 

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

    protected void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapPageRoute("UserRoute", "{Name}", "~/user.aspx"); 

    } 

    protected void Application_End(object sender, EventArgs e) 
    { 

    } 
} 

要訪問的值,使用var v = Page.RouteData.Values["Name"];

用戶導航到www.test.com/1234將由www.test.com/user.aspx和1234將被傳遞的數量來處理通過並使用上面的代碼片段訪問。

0

如果我沒有弄錯,你的問題是你需要申請一個URL,如www.test.com/1234而不是www.test.com/test/1234。

這可以使用您在global.asax文件中提到的路徑完成。但問題在於,您在定義路線時直接使用了一個動態參數{Name}。如果要定義一個單一參數的任何其他途徑,那麼它將無法正常工作,說明如下:

RouteTable.Routes.MapPageRoute("StoreRoute","{Name}","~/Webpages/Test/Demo.aspx"); 
RouteTable.Routes.MapPageRoute("StoreRoute1","{Name1}","~/Webpages/Test/Demo1.aspx"); 

在上述情況下,第二條路線將被宣佈爲第一條路線被重寫。

這就是原因,最好在路由聲明中給出一個靜態參數。

RouteTable.Routes.MapPageRoute("StoreRoute","test/{Name}","~/Webpages/Test/Demo.aspx"); 
RouteTable.Routes.MapPageRoute("StoreRoute1","test1/{Name1}","~/Webpages/Test/Demo1.aspx"); 

在後面的情況下,第二條路線不會被覆蓋。

現在,如果您只需定義一條路線,那麼您的代碼就可以工作。

您可以在下面的鏈接查看我的博客系列URL路由。這個鏈接是我發佈的帖子。

http://karmic-development.blogspot.in/2013/10/url-routing-in-aspnet-web-forms-same.html

感謝&問候, Munjal