.NET Framework File server HTTP di sola lettura di base (ASP.NET Core)


Esempio

1 - Crea una cartella vuota, conterrà i file creati nei passaggi successivi.

2 - Creare un file denominato project.json con il seguente contenuto (regolare il numero di porta e rootDirectory come appropriato):

{
  "dependencies": {
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:60000"
  },

  "frameworks": {
    "dnxcore50": { }
  },

  "fileServer": {
    "rootDirectory": "c:\\users\\username\\Documents" 
  }
}

3 - Creare un file denominato Startup.cs con il seguente codice:

using System;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.FileProviders;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.StaticFiles;
using Microsoft.Extensions.Configuration;

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        var builder = new ConfigurationBuilder();
        builder.AddJsonFile("project.json");
        var config = builder.Build();
        var rootDirectory = config["fileServer:rootDirectory"];
        Console.WriteLine("File server root directory: " + rootDirectory);

        var fileProvider = new PhysicalFileProvider(rootDirectory);

        var options = new StaticFileOptions();
        options.ServeUnknownFileTypes = true;
        options.FileProvider = fileProvider;
        options.OnPrepareResponse = context =>
        {
            context.Context.Response.ContentType = "application/octet-stream";
            context.Context.Response.Headers.Add(
                "Content-Disposition",
                $"Attachment; filename=\"{context.File.Name}\"");
        };
        
        app.UseStaticFiles(options);
    }
}

4 - Aprire un prompt dei comandi, navigare fino alla cartella ed eseguire:

dnvm use 1.0.0-rc1-final -r coreclr -p
dnu restore

Nota: questi comandi devono essere eseguiti una sola volta. Utilizzare dnvm list per verificare il numero effettivo dell'ultima versione installata del CLR principale.

5 - Avviare il server con: dnx web . I file possono ora essere richiesti su http://localhost:60000/path/to/file.ext .

Per semplicità, si presume che i nomi dei file siano tutti ASCII (per la parte nome file nell'intestazione Content-Disposition) e che gli errori di accesso ai file non vengano gestiti.