.NET Framework Servidor de archivos HTTP básico de solo lectura (ASP.NET Core)


Ejemplo

1 - Cree una carpeta vacía, contendrá los archivos creados en los siguientes pasos.

2 - Cree un archivo llamado project.json con el siguiente contenido (ajuste el número de puerto y rootDirectory según corresponda):

{
  "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 - Crea un archivo llamado Startup.cs con el siguiente código:

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 - Abra un símbolo del sistema, navegue a la carpeta y ejecute:

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

Nota: estos comandos deben ejecutarse solo una vez. Use la dnvm list para verificar el número real de la última versión instalada del CLR principal.

5 - Inicia el servidor con: dnx web . Los archivos ahora se pueden solicitar en http://localhost:60000/path/to/file.ext .

Para simplificar, se asume que los nombres de los archivos son todos ASCII (para la parte del nombre del archivo en el encabezado Content-Disposition) y los errores de acceso a los archivos no se manejan.