2011-09-04 22 views
5

से पैरामीटर प्राप्त करने की आवश्यकता है मैं एएसपीनेट एप्लिकेशन पर समूह सुविधा विकसित कर रहा हूं। मैं उन समूहों के लिए सीधी पहुँच देना चाहते हैं, तो मैं यूआरएलएएसपीनेट पर यूआरएल रूटिंग, यूआरएल

www.<domain>.com/<groupname> 
होने की

मैं इस मामले के लिए URL रूटिंग लागू किया है, लेकिन समस्या यह है कि मैं चाहता हूँ पैरामीटर के रूप में एएसपी पृष्ठ पर समूह का नाम एक पास करना चाहते हैं , मैं उसे कैसे कर सकता हूँ?

वास्तविक पथ "~/Public/ViewGroup?group=<groupname> है, इस समूह का नाम कैसे प्राप्त करें और इसे वर्चुअल पथ में जोड़ें?

धन्यवाद

+0

मैं इसे करने की कोशिश की, स्थानीय सर्वर पर लेकिन उत्पादन में नहीं काम किया। –

+0

यह उत्पादन पर काम किया; इन्हें web.config <मॉड्यूल रनअलेमैन किए गए मॉड्यूलफोरएलआरक्वेट्स = "सत्य">

+0

अंतिम कॉन्फ़िगरेशन प्लस सिस्टम पर कॉन्फ़िगरेशन जोड़ें।वेब < ", System.Web.Routing संस्करण = 3.5.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31BF3856AD364E35" विधानसभा = जोड़ने /> <जोड़ने नाम = "UrlRoutingModule " प्रकार =" System.Web.Routing.UrlRoutingModule, System.Web.Routing, संस्करण = 3.5.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31BF3856AD364E35 "/>

उत्तर

5

त्वरित जवाब इस्तेमाल होता है:

routes.MapPageRoute(
    "groupname", 
    "{group}", 
    "~/public/viewgroup" 
); 

और फिर बजाय (या के साथ-साथ) querystring का उपयोग कर ~/public/viewgroup कोड में मान प्राप्त करने के, आप के बजाय RouteData से समूहनाम निकालने होगा निम्नलिखित नुसार।

ControllerContext.RouteData.Values["groupname"]; 

दूसरा विकल्प आईआईएस रीराइट मॉड्यूल का उपयोग करता है।

<rewrite> 
    <rules> 
     <rule name="groupname"> 
      <match url="^([^/]*)$" /> 
      <action type="Rewrite" url="public/viewgroup?group={R:1}" /> 
     </rule> 
    </rules> 
</rewrite> 

तुम सच में एक नया querystring मूल्य के रूप में मान पास करना होगा, और रूटिंग का उपयोग करना चाहते हैं, तो चीजें मुश्किल हो। आपको वास्तव में एक कस्टम हैंडलर को परिभाषित करना होगा और रूटिंग मानों को querystring पर जोड़ने के लिए पथ को फिर से लिखना होगा।

public class RouteWithQueryHandler : PageRouteHandler 
{ 
    public RouteWithQueryHandler(string virtualPath, bool checkPhysicalUrlAccess) 
     : base(virtualPath, checkPhysicalUrlAccess) 
    { 
    } 

    public RouteWithQueryHandler(string virtualPath) 
     :base(virtualPath) 
    { 
    } 

    public override IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     var request = requestContext.HttpContext.Request; 
     var query = HttpUtility.ParseQueryString(request.Url.Query); 
     foreach (var keyPair in requestContext.RouteData.Values) 
     { 
      query[HttpUtility.UrlEncode(keyPair.Key)] = HttpUtility.UrlEncode(
               Convert.ToString(keyPair.Value)); 
     } 
     var qs = string.Join("&", query); 
     requestContext.HttpContext.RewritePath(
          requestContext.HttpContext.Request.Path, null, qs); 
     return base.GetHttpHandler(requestContext); 
    } 
} 

यह पंजीकृत किया जा सकता इस प्रकार है:

routes.Add("groupname", new Route("{groupname}/products.aspx",  
      new RouteWithQueryHandler("~/products.aspx", true))); 

यह काफी काम का एक बहुत सिर्फ रूटिंग आंकड़ों के बाहर मूल्य खींच से बचने के लिए है।

+0

मैं उपयोग कर रहा हूँ। नेट 3.5, इसलिए मैं Map.add विधि का उपयोग कर रहा हूं r outes.Add (नया रूट ("{groupname}", नया ग्रुप रूट हंडलर ("~/लोक/व्यू ग्रुप? समूह = {समूहनाम}") ); उसने मुझे यह त्रुटि दी: ~/लोक/व्यू समूह? समूह = {groupname} 'वैध वर्चुअल पथ नहीं है –

+0

क्षमा करें मेरा बुरा? अस्वीकृत है, आप एक पुनर्लेखन नियम का उपयोग कर सकते हैं। – TheCodeKing

+0

आप इसे सही sytnax खोजने की कोशिश कर, रूटिंग के साथ भी कर सकते हैं। – TheCodeKing

0

एएसपी.नेट एमवीसी पथ शैली तर्क (पैरामीटर) को सी # नियंत्रक में एक्सेस किया जा सकता है। पुनर्प्राप्त करने के लिए पथ तर्क "आईडी" है जो "123" का मान देता है।

MVC रूटिंग

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { id = RouteParameter.Optional }); 
} 

//Test URL: http://localhost/MyProject/Test/GetMyId/123 

MyController.cs

public class TestController : Controller 
{ 
    public string GetMyId() 
    { 
     //ANSWER -> ControllerContext.RouteData.Values["id"] 
     return ControllerContext.RouteData.Values["id"].ToString(); 
    } 
} 
संबंधित मुद्दे