2008-10-08 22 views
10

मैं अपने Global.asax.cs में निम्नलिखित हैASP.NET MVC

routes.MapRoute(
    "Arrival", 
    "{partnerID}", 
    new { controller = "Search", action = "Index", partnerID="1000" } 
); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = "" } 
); 

मेरे SearchController इस

public class SearchController : Controller 
{ 
    // Display search results 
    public ActionResult Index(int partnerID) 
    { 
     ViewData["partnerID"] = partnerID; 
     return View(); 
    } 
} 

तरह लग रहा है और index.aspx बस ViewData [चलता " साझेदार आईडी "] इस समय।

मैं एक वर्चुअल निर्देशिका Windows XP पर आईआईएस में स्थापित टेस्ट कहा जाता है।

1000 अगर मैं http://localhost/Test/ पर अपने ब्राउज़र बात तो मैं अपेक्षा के अनुरूप प्रदर्शन किया। हालांकि, अगर मैं http://localhost/Test/1000 आज़माता हूं तो मुझे एक पृष्ठ त्रुटि नहीं मिली है। कोई विचार?

वहाँ एक वर्चुअल निर्देशिका में MVC को चलाने के लिए किसी विशेष विचार कर रहे हैं?

उत्तर

4

5.1 अपने यूआरएल की व्याख्या इस तरह है कि अपने टेस्ट नामित फ़ोल्डर 1000 नाम का एक फ़ोल्डर की तलाश में IIS। ऐसा क्यों हैं?

यह तब होता क्योंकि आईआईएस 6 केवल ASP.NET का आह्वान जब यह एक "फ़ाइल नाम एक्सटेंशन" URL कि aspnet_isapi.dll करने (जो एक सी/सी ++ ISAPI फिल्टर प्रेरक के लिए जिम्मेदार है मैप किया है में देखता है ASP.NET।) के बाद से मार्ग एक नेट IHttpModule UrlRoutingModule कहा जाता है, यह हो लागू नहीं होता है जब तक कि ASP.NET ही लागू हो जाता है, जब aspnet_isapi.dll लागू हो जाता है जो केवल तब होता है, जो केवल तब होता है जब वहाँ में एक .aspx है यूआरएल तो, कोई .aspx, कोई UrlRoutingModule, इसलिए 404.

सबसे आसान उपाय है:

आप अपने यूआरएल में .aspx होने कोई आपत्ति नहीं है, बस अपने मार्ग के माध्यम से जाना कॉन्फ़िगरेशन, प्रत्येक पैटर्न में आगे-स्लैश से पहले .aspx जोड़ना। उदाहरण के लिए, {नियंत्रक} .aspx/{कार्रवाई}/{आईडी} या myapp.aspx/{नियंत्रक}/{कार्रवाई}/{आईडी} का उपयोग करें। घुंघराले-ब्रैकेट पैरामीटर नाम, या में 'डिफ़ॉल्ट' मानों के अंदर .aspx डालें, क्योंकि यह नियंत्रक नाम का वास्तव में हिस्सा नहीं है - यह आईआईएस को संतुष्ट करने के लिए यूआरएल में है।

स्रोत: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

1

वहाँ कारणों की एक संख्या जब अपने आवेदन में वर्चुअल निर्देशिका का उपयोग कर रहे हैं।

एक विशेष है कि अधिकांश ब्राउज़र कुकीज़ है कि एक वर्चुअल निर्देशिका से दूसरे के लिए आया था, भले ही क्षुधा एक ही सर्वर पर रहते प्रस्तुत न जाएगा।

+0

और कारण के लिए नीचे वोट है? क्योंकि ऊपर वर्णित स्थिति के लिए वास्तव में एक विशेष विचार है। – NotMe

+1

मैंने आपको एक कम वोट नहीं दिया है, लेकिन आपका विशेष विचार सभी वेब ऐप्स के लिए आम है, और ओपी विशेष रूप से एएसपी.नेट एमवीसी के बारे में पूछ रहा था। दूसरे शब्दों में, आपका जवाब, तकनीकी रूप से सही होने पर, सवाल का जवाब नहीं दे रहा है। –

1

आभासी पथ सेट करने का प्रयास करें: सही MVC परियोजना, गुण, वेब टैब पर क्लिक करें, वहाँ उपयुक्त स्थान दर्ज करें।

2

आप Windows XP पर यह कर रहे हैं, तो आप आईआईएस 5.1 उपयोग कर रहे हैं। आपको अपने अनुरोध को संभालने के लिए ASP.Net प्राप्त करने की आवश्यकता है। आप या तो ({नियंत्रक} .mvc/{कार्रवाई}/{आईडी}) अपने मार्गों में एक एक्सटेंशन जोड़ने और ASP.Net है कि विस्तार के नक्शे या ASP.Net के लिए सभी अनुरोधों को मैप करने के लिए की जरूरत है। http://localhost/Test काम करता है यह default.aspx को जो विशेष रूप से MVC परियोजनाओं में नियंत्रित किया जाता है चला जाता है क्योंकि।

साथ ही, आपको http://localhost/Test/Search/Index/1000 निर्दिष्ट करने के लिए की जरूरत है। यदि आप एक आईडी निर्दिष्ट करना चाहते हैं तो नियंत्रक और क्रिया टुकड़े वैकल्पिक नहीं हैं।

+0

उत्तर के लिए धन्यवाद। यह वास्तव में आईआईएस 5.x के साथ एक समस्या है और मुझे वास्तव में विजुअल स्टूडियो डेवलपमेंट सर्वर का उपयोग करके इसके आसपास मिल गया है। यह फिर http: // localhost और http: // localhost/1000 दोनों के लिए ठीक काम करता है। यदि आप उस अंतिम पैराग्राफ को संपादित करना चाहते हैं तो मैं आपके उत्तर को स्वीकार के रूप में चिह्नित करूंगा। –