Я не могу получить доступ к index.html в wwwroot, когда использую службу Windows для запуска своего сайта - PullRequest
0 голосов
/ 23 января 2019

Я не могу получить доступ к своим статическим файлам в wwwroot, когда использую службу windows для запуска своего сайта, но это работает, когда я использую IIS Express или IIS . Я строю проект, используя Asp.Net Core 2.2.

Действия в контроллерах в порядке, только статические файлы недоступны.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        var df = new DefaultFilesOptions();
        df.DefaultFileNames.Add("Index.html");
        app.UseDefaultFiles(df);
        app.UseStaticFiles();
        app.UseMvc();
    }
}


public class Program
{
    public static void Main(string[] args)
    {
        var isService = !(Debugger.IsAttached || args.Contains("--console"));
        if (isService)
        {
            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            Directory.SetCurrentDirectory(pathToContentRoot);
            var host = CreateWebHostBuilder(args.Where(arg => arg != "--console").ToArray()).Build();
            host.RunAsService();
        }
        else
        {
            WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().Build().Run();
        }
    }
    static int Port = 9099;
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => { options.Listen(IPAddress.Any, Port); })
        .UseStartup<Startup>();
}

1 Ответ

0 голосов
/ 23 января 2019

Это потому, что вы устанавливаете каталог при запуске приложения в качестве службы Windows.

Вместо этого

var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
Directory.SetCurrentDirectory(pathToContentRoot);

Настройте определение Webhost-Build

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => { options.Listen(IPAddress.Any, Port); })
        .UseStartup<Startup>()
        .UseContentRoot(AppContext.BaseDirectory); // add this line

А затем в классе Startup добавьте параметры статического файла

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    var df = new DefaultFilesOptions();
    // these options are not necessary index.html is added by default
    df.DefaultFileNames.Add("Index.html");
    app.UseDefaultFiles(df);
    app.UseStaticFiles(new StaticFileOptions
      {
         FileProvider = env.WebRootFileProvider
      });
    app.UseMvc();
}

Также убедитесь, что ваш index.html всегда копируется в выходной каталог.Либо добавьте это в ваш csproj-файл

<Content Update="wwwroot\index.html">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>

, либо в visual-studio щелкните его правой кнопкой мыши> Свойства> Скопировать в выходной каталог> Скопировать всегда

...