在 WPF 自托管 asp.net 核心应用程序中加载视图

Ale*_*dre 4 c# wpf asp.net-core-mvc asp.net-core

我们需要在 WPF 应用程序中自托管一个 Asp.Net Core 应用程序,API 工作正常,但加载 cshtml 视图存在一些问题。

这是我们的代码:Host Builder:

public static class HostBuilder
    {
        private static IWebHost host;

        public static async Task Start()
        {
            if (host == null)
            {
                var ip = System.Net.IPAddress.Parse("127.0.0.1");
                var port = 9388;

                host = new WebHostBuilder()
                   .UseKestrel(options =>
                   {
                       options.Listen(ip, port);
                   })
                   .UseStartup<HostStartup>()
                   .Build();

                await host.RunAsync();
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

主机启动:

public class HostStartup
    {
        public IConfiguration Configuration { get; }

        public HostStartup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, System.IServiceProvider serviceProvider)
        {

            app.UseMvcWithDefaultRoute();
        }
    }
Run Code Online (Sandbox Code Playgroud)

控制器:

[AllowAnonymous]
    [Route("api")]
    public class LoginController : Controller
    {
        [HttpGet]
        [Route("/myview")]
        public ViewResult MyView()
        {
            var v = View("myview");
            return v;
        }

        [HttpGet]
        [Route("test")]
        public IActionResult Test()
        {
            return Ok("Good!");
        }
    }
Run Code Online (Sandbox Code Playgroud)

网址http://127.0.0.1:9388/api/test有效!(web API) 但是当我们导航到http://127.0.0.1:9388/myview 时,浏览器显示 http 错误 500。

我错过了什么吗?WPF 也不例外。

Ale*_*dre 5

好的,现在可以使用了!你需要手动做一些事情:

1) 将您的 WPF 项目迁移到 VS2017 格式,方法如下: How-to migrate Wpf projects to the new VS2017 format (find for @stil answer)

2)安装Asp.net Core和Asp.net Core MVC

3)再次编辑csproj,将根Sdk属性从Microsoft.NET.Sdk改为Microsoft.NET.Sdk.Razor

4) 将您的 WPF 项目指向框架 4.6.2、4.7 > 不起作用!

5)你的cshtml必须有构建选项“Content”,但是csproj上的指令需要去掉,否则编译不通过。

这是一个例子:https : //github.com/alexandrereyes/wpf-aspnetcore-mvc

  • 实际上,这要容易得多:将新的 ASP.NET Core 网站添加到您的解决方案中。在向导中,选择“完整框架”。将项目类型更改为“ClassLibrary”并在 WPF 项目中调用 WebHost.StartAsync()(请参阅 Program.cs)。 (2认同)