Альтернативный подход при использовании ядра .net - использовать FileProvider. Файлы могут быть в папке или встроены во время компиляции.
В этом примере мы будем использовать встроенные файлы.
Добавьте папку в свой проект, скажем, активы, в ней создайте файл myfile.html, добавьте базовый html в файл, скажем
<html>
<head>
<title>Test</title>
</head>
<body>
Hello World
</body>
</html>
Щелкните правой кнопкой мыши новый файл (при условии, что вы находитесь в Visual Studio) выберите свойства, на экране свойств / действия сборки выберите встроенный ресурс. Он добавит файл в файл csproj.
Щелкните правой кнопкой мыши свой проект, отредактируйте файл csproj. Убедитесь, что ваша группа свойств содержит следующее:
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
Если нет, пожалуйста, добавьте его. Csproj также должен содержать вновь созданный файл html как:
<ItemGroup>
<EmbeddedResource Include="assets\myfile.html" />
</ItemGroup>
Чтобы прочитать файл в вашем контроллере и передать его клиенту, требуется поставщик файлов, который добавляется в startup.cs
Отредактируйте свой startup.cs, убедитесь, что он включает HostingEnvironment:
private readonly IHostingEnvironment HostingEnvironment;
public Startup(IHostingEnvironment hostingEnvironment)
{
HostingEnvironment = hostingEnvironment;
}
Затем создайте поставщика файлов и сделайте его службой, которую можно будет внедрить во время выполнения. Создайте его следующим образом:
var physicalProvider = HostingEnvironment.ContentRootFileProvider;
var manifestEmbeddedProvider =
new ManifestEmbeddedFileProvider(Assembly.GetEntryAssembly());
var compositeProvider =
new CompositeFileProvider(physicalProvider, manifestEmbeddedProvider);
services.AddSingleton<IFileProvider>(compositeProvider);
Чтобы обслужить файл, перейдите к вашему контроллеру, используйте внедрение зависимостей, чтобы получить FileProvider, создать новую службу и обслужить файл. Для этого начните с внедрения зависимостей, добавив поставщика в конструктор.
IFileProvider _fileProvider;
public MyController(IFileProvider fileProvider)
{
this._fileProvider = fileProvider;
}
Затем используйте поставщика файлов в своем сервисе
[HttpGet("/myfile")]
[Produces("text/html")]
public Stream GetMyFile()
{
// Use GetFileInfo to get details on the file passing in the path added to the csproj
// Using the fileInfo returned create a stream and return it.
IFileInfo fileinfo = _fileProvider.GetFileInfo("assets/myfile.html");
return fileinfo.CreateReadStream();
}
Для получения дополнительной информации см. ASP . Пример поставщика файлов Net Core и документация Microsoft здесь.
person
Jason
schedule
15.01.2019