2011-02-08 12 views
7

सबसे पहले, यह केवल एमवीसी नहीं है, केवल वेबफॉर्म नहीं है ..क्वेरी स्ट्रिंग के साथ रूटिंग एएसपी.नेट 4 वेबफॉर्म का उपयोग कैसे करें?

मैं अपनी परियोजना को व्यवस्थित करते समय, मेरी साइट को हमारे ग्राहकों के लिए पिछड़ा संगत रखने के लिए रूटिंग का उपयोग कर रहा हूं।

मैं भी एक और अधिक अनुकूल यूआरएल के लिए हमारी एन्क्रिप्टेड क्वेरी स्ट्रिंग हिलाने की सोच रहा हूँ। इस कैसे काम करता है अपने ग्राहकों बुकमार्क करने के लिए उनके आसपास एक आईडी बदलकर हमारे अन्य ग्राहकों अनुमान लगाने से रोकने के लिए एक बहुत बड़ा एन्क्रिप्टेड यूआरएल है।

लेकिन इस विशाल यूआरएल के बजाय, प्रत्येक क्लाइंट के लिए LoginClientName.aspx जैसे रूट को जोड़ना चाहता था और एन्क्रिप्टेड क्वेरी स्ट्रिंग को हार्ड कोड या शायद डेटाबेस में रखना था।

लेकिन MapPageRoute के लिए एक क्वेरी को जोड़ने के लिए एक रास्ता नहीं दिख रहा है ..

कुछ इस तरह के बारे में सोच रहा था (पता है कि यह काम नहीं करता)

 
routes.MapPageRoute("MapClient1", "LoginClient1.aspx", "Login.aspx?secure=mylongquerystring"); 
routes.MapPageRoute("MapClient2", "LoginClient2.aspx", "Login.aspx?secure=differentmylongquerystring"); 

अब इस अपवाद फेंकता है, क्योंकि यह नहीं करता है एक की अनुमति नहीं है? यूआरएल में .. कोई विचार यह कैसे पूरा करने के लिए? या यह असंभव है?

उत्तर

6

एक बार देख ले दर्ज करने की आवश्यकता होगी इस पर:
http://msdn.microsoft.com/en-us/library/cc668177.aspx

मूल रूप से क्या अपने कहावत है:

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


और उसके बाद:

void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapPageRoute("", 
     "SalesReport/{locale}/{year}/{*queryvalues}", "~/sales.aspx"); 

    routes.MapPageRoute("SalesSummaryRoute", 
     "SalesReportSummary/{locale}", "~/sales.aspx"); 

    routes.MapPageRoute("SalesDetailRoute", 
     "SalesReportDetail/{locale}/{year}/{*queryvalues}", "~/sales.aspx", 
     false); 

... 

    routes.MapPageRoute("ExpenseDetailRoute", 
     "ExpenseReportDetail/{locale}/{year}/{*queryvalues}", "~/expenses.aspx", 
     false, 
     new RouteValueDictionary 
      { { "locale", "US" }, { "year", DateTime.Now.Year.ToString() } }, 
     new RouteValueDictionary 
      { { "locale", "[a-z]{2}" }, { "year", @"\d{4}" } }, 
     new RouteValueDictionary 
      { { "account", "1234" }, { "subaccount", "5678" } }); 
} 
+0

यह काम मैं वास्तव में क्या ... चाहता था routes.MapPageRoute किया ("ClientLogin1", "LoginClientName1" "~/खाता/Login.aspx", झूठी, नई RouteValueDictionary {{ "सुरक्षित", "longhardcodedencryptedstring"}}); – jaekie

+0

@LeeHull वास्तव में जब मैं तुम्हारा आया, तो मैं खुद ही एक ही प्रश्न की तलाश कर रहा था, इसलिए मुझे इसे देखने के लिए धन्यवाद – Letseatlunch

3

इसका मतलब यह आप प्रत्येक ग्राहक के लिए व्यक्तिगत रूप से हर मार्ग निर्दिष्ट करने के लिए होगा कि करता है? (यदि हां, तो आप हमेशा web.config urlMapping इस के लिए इस्तेमाल किया जा सकता था)

इसके बजाय, मार्ग के हिस्से के रूप ग्राहक के नाम का उपयोग और उसके बाद ग्राहक के नाम का उपयोग अपने reallylongquerystring को देखने के लिए

कुछ इस तरह:

routes.MapPageRoute("ClientLoginRoute","Login/{clientName}","~/forms/login.aspx") 

और उसके बाद login.aspx पेज उपयोग पर ग्राहक का नाम आदि और

String reallyLongQueryString = Magic.GetReallyLongQueryString(Page.RouteData.Values["clientName"]); 

Dim reallyLongQueryString as String = Magic.GetReallyLongQueryString(Page.RouteData.Values("clientName")) 

लंबी स्ट्रिंग को देखने मैं यहाँ मानते हुए कर रहा हूँ था टी यदि एक ग्राहक एक और ग्राहक के रूप में वे लॉगइन विवरण पता नहीं (है कि अगर समझ में आता है) के नाम पता था कि यह कोई फर्क नहीं पड़ता ... के रूप में वे अभी भी साख आदि

+0

हाँ, यह मेरा जवाब होगा। (सी # संस्करण इस स्ट्रिंग reallyLongQueryString = Magic.GetReallyLongQueryString (Page.RouteData.Values ​​[ "CLIENTNAME"]) होना चाहिए, ) –

+2

तय, क्यों इतना IntelliSense नहीं है !? – davidsleeps