无法将ASP.NET核心应用作为Windows服务运行

问题描述

我有一个3.1版的ASP.NET CORE项目。我正在使用HTTP.SYS托管此项目。 wwwroot文件夹中有一些静态文件,该程序会提供这些文件。这是我的 startup.cs 的外观。

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();

        services.AddMvc().ConfigureApiBehaviorOptions(o =>
        {
             o.SuppressMapClientErrors = true;
             o.SuppressModelStateInvalidFilter = true;
        })
        .AddNewtonsoftJson(o => o.SerializerSettings.DateParseHandling = DateParseHandling.DateTimeOffset)
        .SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
            
        services.Configure<httpsysOptions>(options =>
        {
            options.UrlPrefixes.Add("http://localhost:44385/");
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
            });
         });
    }


    public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
            
        app.UseFileServer();
        app.UseRouting();
            
        app.UseCors(o => o.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());


        app.UseEndpoints(endpoints => 
        {
            endpoints.MapGet("/",async context =>
            {
                await context.Response.WriteAsync("Hello World");
            });
        });
    }
}

我的 program.cs 看起来像这样:

public class Program
{
     
  public static void Main(string[] args)
  {
     CreateHostBuilder(args).Build().Run();
  }
  public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
          .ConfigureWebHostDefaults(webBuilder =>
          {
             webBuilder.Usehttpsys();
             webBuilder.UseStartup<Startup>();
          }).UseWindowsService();
}

现在使用此代码,我可以创建Windows服务并运行它,但是当我点击该URL时,我只会看到Hello World消息。服务运行时,不会显示任何静态页面。我想我在这里做错了。什么是正确的方法

解决方法

app.UseFileServer();

调用app.UseFileServer启用静态文件和默认文件的提供,目录浏览未启用,因此当您访问静态文件时,它将返回404错误。

要解决此问题,我们可以启用目录浏览功能,尝试按以下方式更改您的代码(默认情况下,静态文件存储在wwwroot文件夹中):

        app.UseFileServer(new FileServerOptions
        { 
            RequestPath = "/StaticFiles",//assign the request path.
            EnableDirectoryBrowsing = true
        });

然后,测试屏幕截图如下:

enter image description here

更多详细信息,请检查Static files in ASP.NET Core

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...