2015-06-04 16 views
8

में एक फ़ाइल पढ़ना मैं अपने सर्वर के मुख्य फ़ोल्डर में अपनी create.sql फ़ाइल तक पहुंच बनाना चाहता हूं। इसमें मेरा डेटाबेस सेट अप करने के लिए प्रश्न हैं। मुझे इस फ़ाइल तक पहुंचने में कोई समस्या है।एमवीसी 6

1) मैं वास्तव में Configuration के माध्यम से वहां नहीं जा सकता। मैं केवल AddJsonFile, AddXmlFile, और AddIniFile का उपयोग कर सकता हूं। और मुझे लगता है कि इनमें से किसी एक में बड़ी एसक्यूएल फ़ाइल डालना सबसे अच्छा विचार नहीं है।

2) Mvc source on githubMapPath गायब प्रतीत होता है। तो Server.MapPath("~/create.sql") का उपयोग करने की कोई संभावना नहीं है।

तब इसे कैसे प्राप्त करें?

+0

'मैपपाथ' एएसपी.नेट का हिस्सा है। –

+3

आप अपने आवेदन के रूट पथ प्राप्त करने के लिए IAplicationEnvironment सेवा पर ApplicationBasePath प्रॉपर्टी का उपयोग कर सकते हैं ... उत्सुक, आप जिस परिदृश्य को स्वीकार करने की कोशिश कर रहे हैं वह क्या है? –

+0

@ किरण चल्ला यह काम करता है, अद्भुत, धन्यवाद! अगर आप चाहें, तो कृपया इसे एक उत्तर के रूप में लिखें और मैं इसे स्वीकार करूंगा :) और आपके प्रश्न के संबंध में - मैं सर्वर स्टार्टअप पर अपने डेटाबेस (टेबल, फ़ंक्शंस इत्यादि) की संरचना बनाना चाहता हूं। –

उत्तर

15

जैसा कि पहले से ही देखा गया है और टिप्पणियों में उल्लेख किया गया है ऐसा लगता है कि एएसपी.नेट वीएनएक्स्ट (एमवीसी 6) में MapPath नहीं है।

http://forums.asp.net/t/2005166.aspx?HostingEnvironment+Equivalent+For+MapPath

मूल रूप से आप समाधान नीचे निम्नलिखित, IApplicationEnvironment इंटरफ़ेस है, जो वर्तमान में एक सेवा के रूप में कार्यान्वित किया जाता है से ApplicationBasePath प्राप्त करने की आवश्यकता:: मैं वैकल्पिक हल यहां पाया

private readonly IApplicationEnvironment _appEnvironment; 

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

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

और यह भी, बजाय IApplicationEnvironment इंजेक्शन करने के लिए आप PlatformServices.Default.Application.ApplicationBasePath का उपयोग कर सकते हैं।

संपादित:

removed (see EDIT2) 

EDIT2:: यहाँ एक संभव PlatformServices के विस्तार के रूप में MapPath/UnmapPath के कार्यान्वयन है थोड़ा संशोधित, IsPathMapped() यदि पथ मानचित्रण/unmapping है देखने के लिए के रूप में अच्छी तरह से जोड़ा कुछ चेकों के रूप में वास्तव में जरूरत है।

public static class PlatformServicesExtensions 
{ 
    public static string MapPath(this PlatformServices services, string path) 
    { 
     var result = path ?? string.Empty; 
     if (services.IsPathMapped(path) == false) 
     { 
      var wwwroot = services.WwwRoot(); 
      if (result.StartsWith("~", StringComparison.Ordinal)) 
      { 
       result = result.Substring(1); 
      } 
      if (result.StartsWith("/", StringComparison.Ordinal)) 
      { 
       result = result.Substring(1); 
      } 
      result = Path.Combine(wwwroot, result.Replace('/', '\\')); 
     } 

     return result; 
    } 

    public static string UnmapPath(this PlatformServices services, string path) 
    { 
     var result = path ?? string.Empty; 
     if (services.IsPathMapped(path)) 
     { 
      var wwwroot = services.WwwRoot(); 
      result = result.Remove(0, wwwroot.Length); 
      result = result.Replace('\\', '/'); 

      var prefix = (result.StartsWith("/", StringComparison.Ordinal) ? "~" : "~/"); 
      result = prefix + result; 
     } 

     return result; 
    } 

    public static bool IsPathMapped(this PlatformServices services, string path) 
    { 
     var result = path ?? string.Empty; 
     return result.StartsWith(services.Application.ApplicationBasePath, 
      StringComparison.Ordinal); 
    } 

    public static string WwwRoot(this PlatformServices services) 
    { 
     // todo: take it from project.json!!! 
     var result = Path.Combine(services.Application.ApplicationBasePath, "wwwroot"); 
     return result; 
    } 
} 

EDIT3:PlatformServices.WwwRoot() वापसी वास्तविक निष्पादन पथ और .net कोर 2.0 में, यह xxx \ बिन \ डीबग \ netcoreapp2.0, जो स्पष्ट रूप से क्या आवश्यक है नहीं है डीबग मोड। इसके बजाय, PlatformServicesIHostingEnvironment के साथ प्रतिस्थापित करें और environment.WebRootPath का उपयोग करें।

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