2009-10-22 4 views
10

मैं सिस्टम.Web.Routing का उपयोग कर एएसपी.NET यूआरएल रूटिंग को कार्यान्वित करने की कोशिश कर रहा हूं। और यह मेरे लोकहोस्ट पर ठीक काम करता प्रतीत होता है हालांकि जब मैं लाइव जाता हूं तो मुझे आईआईएस 7 की 404 त्रुटि मिलती है (फ़ाइल नहीं मिली)। एफवाईआई होस्टिंग विंडोज सर्वर 2008 आईआईएस 7 का उपयोग करता है।आईआईएस 7 होस्टिंग पर्यावरण में यूआरएल रूटिंग प्राप्त करने के लिए मेरे सिर को तोड़ना: एएसपी.नेट

मुझे लगता है कि यह रूटिंग तंत्र को संभालने में कुछ अंतर कर रहा है। लेकिन मैं यह समझने में सक्षम नहीं हूं कि वास्तव में क्या हो रहा है। नीचे दी गई सेटिंग्स और बदलाव हैं जिन्हें मैंने अभी तक काम करने के लिए बनाया है और खुद को कुछ श्रेय देने के लिए यह स्थानीय रूप से बिल्कुल ठीक काम करता है।

Web.Config सेटिंग

और फिर मैं एक system.webserver अनुभाग में निम्न मार्कअप है कि

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="Session" /> 
     <add name="Session" type="System.Web.SessionState.SessionStateModule"/> 
     <add name="UrlRoutingModule" 
       type="System.Web.Routing.UrlRoutingModule, 
        System.Web.Routing, Version=3.5.0.0, 
        Culture=neutral, 
        PublicKeyToken=31BF3856AD364E35" /> 

    </modules> 
    <handlers> 
     <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </handlers> 

</system.webServer> 

फिर Application_Start खंड में मैं एक मार्ग के रूप में परिभाषित किया है निम्नानुसार है:

void Application_Start(object sender, EventArgs e) 
{ 
    RegisterRoutes(RouteTable.Routes); 
} 
void RegisterRoutes(RouteCollection routes) 
{    
    routes.Add(
     "MyRoute", 
      new Route("ProductDetail/{ProductId}/{ProductName}", 
       new MyRouteHandler("~/ProductDetail.aspx"))); 
} 

अंत में MyRouteHandler इस प्रकार दिखता है:

public IHttpHandler GetHttpHandler(RequestContext requestContext) 
{ 
    var display = (Page)BuildManager.CreateInstanceFromVirtualPath(
        _virtualPath, typeof(Page)); 
    HttpContext.Current.Items["ProductId"] = requestContext.RouteData.Values["Product"]; 
    return display; 
} 

और कराई पृष्ठ पर मैं उत्पाद आईडी हथियाने रहा हूँ के रूप में

ProductId = (int)HttpContext.Current.Items["Product"]; 

इस प्रकार है और ये मेरे गंदगी का अंत है। और यह स्थानीय रूप से ठीक काम करता है। मैं थोड़ी देर के लिए यह कोशिश कर रहा हूं लेकिन अब तक सफल नहीं हुआ।

किसी भी सहायता को स्वीकार किया जाएगा।

धन्यवाद ...

+1

क्या आपके पास कोई पुनर्लेखन नियम लागू है? प्रतिक्रिया के लिए – Rony

उत्तर

2

सुनिश्चित नहीं है कि क्या आप समस्या का पता लगाने में सक्षम थे ... हालांकि यदि आप अभी भी समाधान ढूंढ रहे हैं तो आप निम्न का प्रयास कर सकते हैं। मुझे कुछ समय पहले एक ही स्थिति का सामना करना पड़ा और वेब कॉन्फ़िगरेशन में रीवाइट नियमों का उपयोग करके इसे काम करने के लिए मिला, जिसके लिए आपको किसी रूटिंग तंत्र की आवश्यकता नहीं होगी। तो सबसे पहले मैं आपको किसी भी रूटिंग सेटिंग को हटाने और Global.asax फ़ाइल से कोड को हटाने के लिए प्रोत्साहित करता हूं।

तब अनुभाग में आप के रूप में

<rewrite> 
    <rewriteMaps> 
     <rewriteMap name="map1" defaultValue="(.+)"/> 
    </rewriteMaps> 
    <rules> 
     <rule name="Rewrite rule1 for map1"> 
     <match url="product/(.+)/(.+)"/> 
     <conditions> 
      <add input="{map1:{REQUEST_URI}}" pattern="(.+)"/> 
     </conditions> 
     <action type="Rewrite" url="productdetail.aspx?Product={R:1}" appendQueryString="false" redirectType="Permanent"/> 
     </rule> 
    </rules> 
    </rewrite> 

इस प्रकार आप फिर से लिखने तंत्र मैं सुझाव है कि आप स्कॉट गुथरी द्वारा this article पढ़ा समझने समस्या है, तो फिर से लिखने के नियम के रूप में जोड़ सकते हैं।

मुझे लगता है कि यह आपके लिए आईआईएस 7.0 या 7.5 पर्यावरण प्रदान करने के लिए काम करना चाहिए।

+0

yup मैंने इस मुद्दे को लंबे समय से वापस लिया और इसे फिर से लिखने के नक्शे का उपयोग करके इसे ठीक कर दिया ... वैसे भी आपकी प्रतिक्रिया – user153410

+0

उपयोगकर्ता 153410 के लिए धन्यवाद, मेरे पास एक ही समस्या है। क्या आप सुझाव दे सकते हैं कि आपने इसे कैसे ठीक किया? – Riz

4

मैं इस लेख का पालन किया: How to: Use Routing with Web Forms

इससे पहले कि मैं यह पाया मैं अपने साझा मेजबान और कोई भी पर मुद्दों स्थानीय स्तर पर था। यह मेरा web.config था।

मेरे मेजबान एकीकृत पाइप लाइन के साथ आईआईएस 7 उपयोग कर रहा था, मैं इस याद आ रही थी:

<handlers> 
    <!---after all the others--->  
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" 
      path="UrlRouting.axd" 
      type="System.Web.HttpForbiddenHandler, 
      System.Web, Version=2.0.0.0, 
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
</handlers> 

संपादित करें: अपनी सेटिंग और कोड के अनुसार, केवल एक चीज बाईं यदि आप रूटिंग dll है देखने के लिए जाँच करने के लिए है web.config में परिभाषित किया है और यह भी अपने बिन निर्देशिका के लिए तैनात:

<add assembly="System.Web.Routing, Version=3.5.0.0, 
    Culture=neutral, 
    PublicKeyToken=31BF3856AD364E35"/> 
+0

हाय धन्यवाद। क्या आप बता सकते हैं कि आपने अपने web.config में क्या परिवर्तन किए हैं। यह वास्तव में सहायक होगा। – user153410

+0

मैंने जोड़ा कि मेरी समस्या क्या तय हुई। लेख होस्ट सेटिंग्स के आधार पर रूटिंग सेट अप करने के तरीके पर बहुत स्पष्ट है। –

+0

हाय उत्तर के लिए फिर से धन्यवाद। मेरे पास वेब में सबकुछ है। कॉनफिग और मैंने आपके द्वारा सुझाए गए आलेख को देखा है। वेब में मेरे पास कितनी आवश्यक सेटिंग्स हैं। कॉनफिग। मैं वास्तव में यह समझने में सक्षम नहीं हूं कि ऐसा क्यों कर रहा है। मुझे नहीं पता कि आईआईएस 7 इस तरह की सरल चीजें पाने में इतनी जटिल क्यों है कि यूआरएल रूटिंग या रीराइटिंग इन दिनों बहुत आम है। – user153410

1

सूचित करने के लिए बस क्या अंत में मेरी समाधान था ... IIS7 पर एकीकृत करने के लिए पाइप लाइन मोड बदलने और मैं वेब पर कुछ लाइनों को जोड़ने folowed। उपरोक्त लिंक से कॉन्फ़िगर करें ... http://msdn.microsoft.com/en-us/library/cc668202.aspx

शुभकामनाएं।

3

इसे वेब.config में आज़माएं। मेरे लिए काम किया

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

वेबसाइट फॉर्म को वेबहोस्ट के लिए स्थानीय देव अपलोड करने के बाद, रूटिंग पर 404 मिल रहा था। runAllManagedModulesForAllRequests समस्या हल हो गई। –

संबंधित मुद्दे