2015-01-22 12 views
9

मुझे पता है कि मैं होस्टिंगएन्वायरमेंट (माइक्रोसॉफ्ट.एस्पनेट.होस्टिंग नामस्थान) द्वारा वेब रूट प्राप्त कर सकता हूं।भौतिक पथ के लिए वर्चुअल पथ को कैसे मैप करें?

मुझे अपने वेब एप्लिकेशन में आईआईएस में बनाए गए वर्चुअल पथ के अनुसार भौतिक पथ प्राप्त करने की आवश्यकता है। आईआईएस में, वेबसाइट रूट मेरी प्रकाशित साइट के wwwroot को इंगित करता है और आईआईएस में जोड़ा गया वर्चुअल निर्देशिका है जो मेरे wwwroot के बाहर एक फ़ोल्डर को इंगित करता है। मुझे आशा है कि मैं उस आभासी निर्देशिका का भौतिक पथ प्राप्त कर सकता हूं। एमवीसी 5 या इससे पहले के संस्करण में, मैं HostingEnvironment.MapPath (System.Web नेमस्पेस) या सर्वर.मैपपाथ का उपयोग कर सकता हूं, मुझे एमवीसी 6 में क्या करना चाहिए?

संपादित करें:

यह आभासी पथ लेकिन वर्चुअल निर्देशिका IIS में जोड़ा नहीं है। मुझे उम्मीद है कि मैं उस वर्चुअल निर्देशिका का भौतिक पथ प्राप्त कर सकता हूं। मुझे लगता है कि आभासी निर्देशिका आईआईएस की एक विशेष विशेषता है, जो पूर्ण आभासी पथ के उप पथ की तरह दिखती है लेकिन भौतिक वेब रूट फ़ोल्डर के बाहर एक फ़ोल्डर हो सकती है।

अक्टू 4, 2015

this issue in ASP.NET 5 Hosting repo का संदर्भ लें, अब तक, यह हम आईआईएस में वर्चुअल निर्देशिका के भौतिक पथ प्राप्त कर सकते हैं नहीं लगता है।

उत्तर

7

आप उस के लिए IApplicationEnvironment, जो संपत्ति ApplicationBasePath

private readonly IApplicationEnvironment _appEnvironment; 

    public HomeController(IApplicationEnvironment appEnvironment) 
    { 
     _appEnvironment = appEnvironment; 
    } 

    public IActionResult Index() 
    { 
     var rootPath = _appEnvironment.ApplicationBasePath; 
     return View(); 
    } 
+0

मुझे नहीं लगता कि मैं इस तरह से आईआईएस में परिभाषित वर्चुअल निर्देशिका प्राप्त कर सकता हूं। एप्लिकेशनबेसपैथ मेरे 'wwwroot' के रूट पथ को इंगित करता है, लेकिन वर्चुअल निर्देशिका मेरे wwwroot के बाहर पूरी तरह से एक अलग पथ हो सकती है हालांकि वर्चुअल निर्देशिका url स्वयं ही मेरी वेबसाइट के सबफ़ोल्डर की तरह दिखती है। – Ricky

+1

'IAplicationEnvironment.AplicationBasePath' आपके आवेदन रूट की बिल्कुल शारीरिक निर्देश है (आईआईएस के wwwroot नहीं)। यह ऐप की प्रोजेक्ट.जेसन के साथ एक निर्देशिका है। 'IHostingEnvironment.WebRoot' आपके वेबूट के लिए एप्लिकेशनबेसपैथ की एक उपनिर्देशिका है - यह ऐप की प्रोजेक्ट.जेसन में निर्दिष्ट 'डीआरआर' है। उदाहरण के लिए यह एक डीआईआर है जहां स्टेटिकफाइल मिडलवेयर से फाइलें मिलती हैं। – Shrike

6

Azure वेब Apps पर होता है उपयोग कर सकते हैं, तो आप wwwroot मिल जाएगा एक अलग जगह में है:

स्रोत कोड के सभी हो जाता है wwwroot को छोड़कर D:/Home/site/approot/src/{WebsiteName} पर कॉपी किया गया। IApplicationEnvironment.ApplicationBasePath यहां अंक।

wwwrootD:/Home/site/wwwroot में चला जाता है। IHostingEnvironment.WebRootPath यहां अंक।

यह अभी भी आईआईएस आभासी निर्देशिकाओं के साथ काम नहीं करेगा। WebRootFileProviderIHostingEnvironment इंटरफ़ेस पर IFileProvider पर GetFileInfo(string subpath) जैसी विधियों के साथ WebRootFileProvider संपत्ति है। मैंने code पढ़ा और पाया subpath एक भौतिक है, न कि आभासी वाला।

जाहिर है, एक स्वयं-होस्ट किए गए सेटअप में, कोई आईआईएस नहीं है। यदि आप आईआईएस पर भरोसा करते हैं और वास्तव में ऐसा करना चाहिए, तो आपको शायद System.Web का संदर्भ देना होगा।

एचटीएच।

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