Wie Sie schreiben, um statische Datei in asp.net core?

Ich versuche ein Beispiel zu schreiben, um statische Dateien (.txt).

Ich versucht habe:

    public IActionResult Index()
    {
        string dt = DateTimeOffset.Now.ToString("ddMMyyyy");

        string path = Path.Combine(_environment.WebRootPath, $"Logs/{dt}");

        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        string filePath = Path.Combine(_environment.WebRootPath, $"Logs/{dt}/{dt}.txt");

        using (FileStream fs = System.IO.File.Create(filePath))
        {
            AddText(fs, "foo");
            AddText(fs, "bar\tbaz");
        }

        return View();
    }

    private void AddText(FileStream fs, string value)
    {
        byte[] info = new System.Text.UTF8Encoding(true).GetBytes(value);
        fs.Write(info, 0, info.Length);
    }

Aber es hat alles, was sich in wwwroot Ordners, anstatt die Wurzel des Projekts.

Wie Sie schreiben, um statische Datei in asp.net core?

Möchte ich zum erstellen der Textdatei hier:

Wie Sie schreiben, um statische Datei in asp.net core?

Wo kann ich die Bearbeiten?

UPDATE:

Dies ist, wie ich definieren _environment:

public class HomeController : Controller
{
    private readonly IHostingEnvironment _environment;

    public HomeController(IHostingEnvironment environment)
    {
        _environment = environment;
    }
}
  • Auch nicht _environment.WebRootPath geben Sie den Pfad zu wwwroot hier?
  • ersetzen Logs/{dt} mit ../Logs/{dt}
  • Genau das, was ich Suche. Vielen, vielen Dank!
  • Vorausgesetzt, dass Sie halten den wwwroot-Ordner natürlich.
  • geht davon aus, dass Struktur-OP zur Verfügung gestellt
  • Oder verwenden Sie einfach ContentRootPath statt WebRootPath und keine Verwirrung bei allen.
  • ja, wenn ContentRootPath und WebRootPath werden nicht überschrieben, dann contentrootpath ist Elternteil von webroot

InformationsquelleAutor Vayne | 2017-05-23



2 Replies
  1. 4

    Das problem ist, dass Sie mit IHostingEnvironment.WebRootPath zum bestimmen der root-Ordner. Diese Eigenschaft ist der absolute Pfad zu dem Verzeichnis enthält die web-servable Anwendung Inhalt-Dateien, d.h. die wwwroot Ordner. Stattdessen sollten Sie die IHostingEnvironment.ContentRootPath Eigenschaft, die wird, geben Sie den absoluten Pfad zu dem Verzeichnis, das die Anwendung enthält.

    Beispiel:

    var contentRoot = _environment.ContentRootPath;
    var webRoot = _environment.WebRootPath;
    
    //contentRoot = "C:\Projects\YourWebApp"
    //webRoot     = "C:\Projects\YourWebApp\wwwroot"

    Könnten Sie WebRootPath und navigieren Sie zum übergeordneten Verzeichnis, aber wenn Sie aus irgendeinem Grund wählen zu verschieben wwwroot irgendwo anders im code brechen kann. Viel besser, eine Methode zu verwenden, geben Sie den richtigen Pfad zu jeder Zeit in jedem Projekt.

    • Danke für die Klassifizierung. Habe ich gerade getestet. Es funktioniert.
  2. 1

    Statt

    string filePath = Path.Combine(_environment.WebRootPath, $"Logs/{dt}/{dt}.txt");

    verwenden

    var folder = new System.IO.DirectoryInfo(_environment.WebRootpath).Parent.FullName;
    var filePath = Path.Combine(folder, $"Logs/{dt}/{dt}.txt");
    • Oops, sollte DirectoryInfo. Bearbeitet.
    • Vielen Dank! Das ist Hilfe!!!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.