वेब-रिश्तेदार पथ पर पूर्ण पथ वापस

अगर मैं सर्वर.मैपपैथ का उपयोग कर फ़ाइल के अस्तित्व को ढूंढने और सत्यापित करने में कामयाब रहा हूं और अब मैं सीधे उस फ़ाइल को उपयोगकर्ता को भेजना चाहता हूं, तो पूर्ण पथ को वापस करने के लिए सबसे तेज़ तरीका क्या है सापेक्ष वेब पथ?

0
जोड़ा संपादित
विचारों: 1

5 उत्तर

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

0
जोड़ा
यह जरूरी नहीं है - मैपपैथ कॉल किसी अन्य विधि द्वारा किया जा सकता था और कई अलग-अलग तत्वों से निर्मित मेरे फ़ाइल चेकर विधि, या (मेरे मामले में) से गुजरता / कहा जाता है, जिसमें से एक मेरी संसाधन निर्देशिका (परिभाषित है) "~ / __ संसाधन" के रूप में)। स्पष्ट रूप से उपयोगकर्ता को इस पथ पर निर्देशित करने के परिणामस्वरूप अप्रत्याशित परिणाम होंगे। यह जानने के लिए भी उपयोगी होगा क्योंकि कभी-कभी पूर्ण फ़ाइल पथ को किसी भी अन्य प्रासंगिक जानकारी के साथ डेटाबेस से बाहर खींच लिया गया हो सकता है।
जोड़ा लेखक tags2k, स्रोत
@tagsk - मुझे इसके बारे में पता नहीं है। जिस तरह से विधि परिभाषित की जाती है, यदि सर्वर में आपके द्वारा इनपुट की जाने वाली स्ट्रिंग मान्य है और भौतिक सर्वर पथ लौटाता है, तो यह आपके द्वारा जेनरेट किए जाने के बावजूद वैध वर्चुअल पथ भी होना चाहिए था। वर्चुअल एड्रेस की शुरुआत में tilde (~) के उपयोग के संबंध में, इस एमएसडीएन आलेख को एएसपी.नेट वेब साइट पथ :> एएसपी.नेट में वेब अनुप्रयोग> रूट ऑपरेटर (~) शामिल है, जिसका आप उपयोग कर सकते
जोड़ा लेखक Yaakov Ellis, स्रोत
Yaakov - ऐसा नहीं है। उदाहरण के लिए, मैं जिस फ़ंक्शन का उपयोग करता हूं वह रूट पथ लेता है और एक IEnumerable संग्रह को रिकर्सिवली देता है। मेरे वेब एप्लिकेशन में मैं इस पथ को भौतिक व्यक्ति के अपने सापेक्ष पथ को हल कर सकता हूं, लेकिन जब मैं इस रिकर्सिव सूची को वापस लेता हूं और उन्हें अपने आवेदन में सापेक्ष पथों पर वापस मैप करना चाहता हूं तो मेरे पास यह जानकारी नहीं है।
जोड़ा लेखक one.beat.consumer, स्रोत

शायद यह काम कर सकता है:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);

मैं C# का उपयोग कर रहा हूं लेकिन vb को अनुकूलित किया जा सकता है।

0
जोड़ा
@ गेटकिल्लर : ध्यान दें कि यदि आप अपनी वेबसाइट में आईआईएस वर्चुअल निर्देशिका का उपयोग करते हैं, तो आपका समाधान विफल हो सकता है क्योंकि एप्लिकेशन भौतिक पथ फ़ाइल के भौतिक पथ से अलग हो सकता है।
जोड़ा लेखक Costo, स्रोत
यह केवल एक अनुरोध के संदर्भ में काम करता है।
जोड़ा लेखक bzlm, स्रोत

मुझे पता है कि यह पुराना है लेकिन मुझे वर्चुअल निर्देशिकाओं के लिए खाते की आवश्यकता है (प्रति @ कोस्टो की टिप्पणी)। यह मदद करता है:

static string RelativeFromAbsolutePath(string path)
{
    if(HttpContext.Current != null)
    {
        var request = HttpContext.Current.Request;
        var applicationPath = request.PhysicalApplicationPath;
        var virtualDir = request.ApplicationPath;
        virtualDir = virtualDir == "/" ? virtualDir : (virtualDir + "/");
        return path.Replace(applicationPath, virtualDir).Replace(@"\", "/");
    }

    throw new InvalidOperationException("We can only map an absolute back to a relative path if an HttpContext is available.");
}
0
जोड़ा

Server.RelativePath (पथ) होना अच्छा नहीं होगा?

अच्छा, आपको बस इसे विस्तारित करने की आवश्यकता है ;-)

public static class ExtensionMethods
{
    public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context)
    {
        return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/");
    }
}

इसके साथ आप बस कॉल कर सकते हैं

Server.RelativePath(path, Request);
0
जोड़ा
भौतिक पथ के लिए एक बेहतर प्रतिस्थापन ~ /। पथ। बदलें (संदर्भ। सर्वरवृत्त ("APPL_PHYSICAL_PATH"), "~ /")
जोड़ा लेखक Josh Russo, स्रोत

मुझे कैनोस से विचार पसंद है। दुर्भाग्य से मैंने "HttpContext.Current.Request" उपलब्ध नहीं था (BundleConfig.cs)।

मैंने इस तरह मेथोड बदल दिया:

public static string RelativePath(this HttpServerUtility srv, string path)
{
     return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}
0
जोड़ा