【问题标题】:.NET Core 2.0 Minimal WebHost with Routes.NET Core 2.0 带路由的最小 WebHost
【发布时间】:2017-10-05 09:16:20
【问题描述】:

我正在尝试创建一个针对 netcoreapp2.0 的绝对最小的 WebHost。 我一直在引用这个但没有成功:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/hosting?tabs=aspnetcore2x

using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Http;

namespace netcore_pi_project
{
    class Program
    {

        public static void Main(string[] args)
        {
            BuildWebHost(args);

            using (var host = WebHost.Start(router => router
                .MapGet("volu", (req, res, data) => 
                    res.WriteAsync($"ps aux".Bash()))
                .MapGet("vold", (req, res, data) => 
                    res.WriteAsync($"ps aux".Bash()))))
            {
                Console.WriteLine("Core Volume project running..");
                host.WaitForShutdown();
            }
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseUrls("http://localhost:5000")
                .Build();
    }
}

这会构建但不会运行:

未处理的异常:System.ArgumentException:必须提供有效的非空应用程序名称。 参数名称:applicationName 在 Microsoft.AspNetCore.Hosting.Internal.HostingEnvironmentExtensions.Initialize(IHostingEnvironment hostingEnvironment,字符串 applicationName,字符串 contentRootPath,WebHostOptions 选项) 在 Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException & hostingStartupErrors) 在 Microsoft.AspNetCore.Hosting.WebHostBuilder.Build() 在 /Users/owe-macpro/projects/netcore-pi-project/Program.cs:line 31 中的 netcore_pi_project.Program.BuildWebHost(String[] args) 在 /Users/owe-macpro/projects/netcore-pi-project/Program.cs:line 17 中的 netcore_pi_project.Program.Main(String[] args)

【问题讨论】:

标签: c# .net asp.net-core asp.net-core-mvc hosting


【解决方案1】:

您的问题的答案在same page you linked

System.ArgumentException 疑难解答

仅适用于 ASP.NET Core 2.0

如果通过将IStartup直接注入依赖注入容器而不是调用UseStartupConfigure来构建主机,则可能会遇到以下错误:Unhandled Exception: System.ArgumentException: A valid non-empty application name must be provided.

这是因为需要applicationName(ApplicationKey)(当前程序集)来扫描HostingStartupAttributes。如果您手动将 IStartup 注入到依赖注入容器中,请将以下调用添加到您的 WebHostBuilder 并指定程序集名称:

WebHost.CreateDefaultBuilder(args)
    .UseSetting("applicationName", "<Assembly Name>")
    ...

或者,将虚拟Configure 添加到您的WebHostBuilder,这会自动设置applicationName(ApplicationKey)

WebHost.CreateDefaultBuilder(args)
    .Configure(_ => { })
    ...

注意:这仅在 ASP.NET Core 2.0 版本中需要,并且仅在您不调用 UseStartupConfigure 时才需要。

【讨论】:

    【解决方案2】:

    在 BuildWebHost 中添加以下内容:

    WebHost.CreateDefaultBuilder(args)
       // ... other Web Host configuration calls
       .UseSetting(WebHostDefaults.ApplicationKey, "[Application Name]")
    

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多