.net - एएसपी.नेट एमवीसी-नियंत्रक से App_Data फ़ोल्डर में पूर्ण पथ पाएं




asp.net-mvc absolute-path (5)

ASP.NET MVC प्रोजेक्ट में नियंत्रक से App_Data फ़ोल्डर के पूर्ण पथ को खोजने का सही तरीका क्या है? मैं अस्थायी रूप से एक .xml फ़ाइल के साथ काम करने में सक्षम होना चाहता हूं और मैं पथ को हार्डकोड नहीं करना चाहता हूं।

यह काम नहीं करता:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");

        //.... do whatever 

        return View();
    }

}

मुझे लगता है कि वेब संदर्भ के बाहर VirtualPathUtility.ToAbsolute () काम नहीं करता है। स्ट्रिंग पथ वापस आता है "सी: \ App_Data \ somedata.xml"

मुझे एक एमवीसी ऐप में .xml फ़ाइल का पथ कहां निर्धारित करना चाहिए? global.asax और इसे एक अनुप्रयोग-स्तरीय चर चिपकाएं?


एएसपी.नेट एमवीसी 1 -> एमवीसी 3

string path = HttpContext.Current.Server.MapPath("~/App_Data/somedata.xml");

एएसपी.नेट एमवीसी 4

string path = Server.MapPath("~/App_Data/somedata.xml");

एमएसडीएन संदर्भ:

HttpServerUtility.MapPath विधि


फिल हाक का एक उदाहरण है जो मुझे लगता है कि पागल "\" शैली निर्देशिका विभाजक के साथ पथ से निपटने के दौरान थोड़ा और स्थिर है। यह पथ संगतता को सुरक्षित रूप से संभालता है। यह System.IO में मुफ्त में आता है

var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);

हालांकि, आप "Server.MapPath" के बजाय "AppDomain.CurrentDomain.BaseDirector" भी आज़मा सकते हैं।


HttpContext.Current.Server.MapPath("~/App_Data"); का उपयोग करने का सबसे सही तरीका है HttpContext.Current.Server.MapPath("~/App_Data"); । इसका मतलब है कि आप केवल उस विधि से पथ पुनर्प्राप्त कर सकते हैं जहां HttpContext उपलब्ध है। यह समझ में आता है: App_Data निर्देशिका एक वेब प्रोजेक्ट फ़ोल्डर संरचना [1] है।

यदि आपको उस श्रेणी से ~ / App_Data के पथ की आवश्यकता है जहां आपके पास HttpContext तक पहुंच नहीं है तो आप हमेशा अपने आईओसी कंटेनर का उपयोग करके एक प्रदाता इंटरफ़ेस इंजेक्ट कर सकते हैं:

public interface IAppDataPathProvider
{
    string GetAppDataPath();
}

अपने HttpApplication का उपयोग करके इसे कार्यान्वित करें:

public class AppDataPathProvider : IAppDataPathProvider
{
    public string GetAppDataPath()
    {
        return MyHttpApplication.GetAppDataPath();
    }
}

जहां MyHttpApplication.GetAppDataPath तरह दिखता है:

public class MyHttpApplication : HttpApplication
{
    // of course you can fetch&store the value at Application_Start
    public static string GetAppDataPath()
    {
        return HttpContext.Current.Server.MapPath("~/App_Data");
    }
}

[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx


string Index = i;
            string FileName = "Mutton" + Index + ".xml";
            XmlDocument xmlDoc = new XmlDocument();

            var path = Path.Combine(Server.MapPath("~/Content/FilesXML"), FileName);
            xmlDoc.Load(path); // Can use xmlDoc.LoadXml(YourString);

पथ को पाने के लिए यह सबसे अच्छा समाधान है जो अभी के लिए बिल्कुल जरूरी है


string path = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

यह प्राप्त करने का सबसे "सही" तरीका है।





absolute-path