RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1157160
Accepted
4per
4per
Asked:2020-07-25 20:24:15 +0000 UTC2020-07-25 20:24:15 +0000 UTC 2020-07-25 20:24:15 +0000 UTC

如何从邻居项目启动 Asp.Net Core 网络主机?

  • 772

以前,我可以像这样从相邻的 NUnit 项目启动 .Net Core 3.1 Asp.Net Core Web 应用程序

[OneTimeSetUp]
public void Setup()
{
    Program.BuildWebHost(new string[] {}).Start();
}        

Web 应用程序中的 Program.cs 看起来像这样

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(new ConfigurationBuilder()
                .AddCommandLine(args)
                .Build())
            .UseStartup<Startup>()
            .Build();
}

但在一些更新后它停止工作。我为 NUnit 找到的只是使用建议WebApplicationFactory

private WebApplicationFactory<Startup> _factory;
private HttpClient _client;

[OneTimeSetUp]
public void GivenARequestToTheController()
{
    _factory = new WebApplicationFactory<Startup>();
    _client = _factory.CreateClient();
}

有用。但是,如果我不想使用这个 HttpClient,但我想使用 Selenium,例如,它就不起作用。从另一个项目启动一个项目似乎是一项平庸的任务,但由于某种原因,存在一些困难。当然,我可以手动找到程序集并启动进程,但这并不严重。


附加组件

  1. “停止工作”是指端口 5000 和 5001 没有在监听,因为它应该通过配置进行监听。也没有其他端口在监听,我扫描了整个 localhost。

  2. 在 Debug 模式下运行测试时,我在 Startup.cs 中放置了一个断点,并且没有错误地运行到最后。


找到了问题的根源

感谢@Andrei Khotko 的例子 ,我们设法通过打字找到了问题的根源。将以下代码添加到Startup.cs后开始播放

public IConfiguration Configuration { get; private set; }

public void ConfigureServices(IServiceCollection services)
{
    ... 

    Configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile($"appsettings.json")    
        .Build();
    services.AddSingleton<IConfiguration>(Configuration);
}

但是为什么会发生这种情况,我还是不明白。一开始我以为是由于测试项目中缺少appsetins.json文件。复制在那里,没有帮助。我检查了调试器,它Directory.GetCurrentDirectory()返回了在构建过程中复制该文件的文件夹的路径。

那么可能是什么问题?

c#
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Andrei Khotko
    2020-08-13T22:12:06Z2020-08-13T22:12:06Z

    使用 WebApi 模板 (.Net Core 3.1) 创建了一个 ASP.NET Core Web 应用程序。创建了 HelloDataManager:

    namespace NetCoreWebAppSample.Managers
    {
        public interface IHelloManager
        {
            string SayHelloTo(string name);
        }
    }
    
    namespace NetCoreWebAppSample.Managers
    {
        public class HelloManager : IHelloManager
        {
            public string SayHelloTo(string name)
            {
                return $"Hello, {name}!";
            }
        }
    }
    

    创建了一个控制器:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using NetCoreWebAppSample.Managers;
    
    namespace NetCoreWebAppSample.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class HelloController : ControllerBase
        {
            private readonly ILogger<HelloController> _logger;
            private readonly IHelloManager _manager;
    
            public HelloController(IHelloManager manager, ILogger<HelloController> logger)
            {
                _manager = manager;
                _logger = logger;
            }
    
            [HttpGet]
            [Route("{name}")]
            public string Get(string name)
            {
                var helloMessage = _manager.SayHelloTo(name);
                return helloMessage;
            }
        }
    }
    

    程序.cs

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    
    namespace NetCoreWebAppSample
    {
        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.UseStartup<Startup>();
                    });
        }
    }
    

    我为 .Net Core 3.1 测试创建了一个程序集,这是一个类库,我在其中添加了一个类:

    using System.Net.Http;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    using NUnit.Framework;
    
    namespace NetCoreWebAppSample.Tests
    {
        [TestFixture]
        public class HelloWebApiTests
        {
            private const string serviceUrl = "http://localhost:50200";
            private HttpClient _httpClient;
    
            [OneTimeSetUp]
            public void Init()
            {
                var arguments = new string[0];
                var builder = Program.CreateHostBuilder(arguments);
    
                _httpClient = new HttpClient();
    
                builder.ConfigureWebHostDefaults(w => w.UseUrls(serviceUrl)).Build().Start();
            }
    
            [Test]
            public async Task UserShouldBeAbleToGetHelloMessage()
            {
                const string userName = "Andrei";
                var requestUrl = $"{serviceUrl}/hello/{userName}";
    
                const string expected = "Hello, Andrei!";
                var response = await _httpClient.GetAsync(requestUrl);
                var actual = await response.Content.ReadAsStringAsync();
                Assert.AreEqual(expected, actual);
            }
        }
    }
    

    测试通过:

    在此处输入图像描述

    • 0
  2. Best Answer
    4per
    2020-08-20T16:31:23Z2020-08-20T16:31:23Z

    为了解决问题中描述的问题(实际上,仅在最后一次编辑后才显示),有必要确保保留原始配置。为此,请使用方法.AddConfiguration()

    Configuration = new ConfigurationBuilder()
       .SetBasePath(Directory.GetCurrentDirectory())
       .AddJsonFile($"appsettings.json")
       .AddJsonFile($"secrets.json")
       .AddConfiguration(Configuration)
       .Build();
    services.AddSingleton<IConfiguration>(Configuration);
    

    PS 没错,这对我也没有帮助,但这已经是下一个问题的主题,我无法从 NUnit 测试 blazor blazor-client-side获取 index.html

    • 0

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5