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

时间:2018-07-26 12:56:09

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

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

这是我们的代码: 主机生成器:

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();
            }
        }

    }

主机启动:

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();
        }
    }

控制器:

[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!");
        }
    }

URL http://127.0.0.1:9388/api/test正在运行! (网络API) 但是,当我们导航到http://127.0.0.1:9388/myview时,浏览器会显示http错误500。

我想念什么吗? WPF上没有例外。

1 个答案:

答案 0 :(得分:1)

好,现在可以使用! 您需要手动执行一些操作:

1)将WPF projet迁移到VS2017格式,方法如下: How-to migrate Wpf projects to the new VS2017 format(寻找@stil答案)

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必须具有构建选项“内容”,但是csproj上的指令需要删除,否则它将无法编译。

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