【发布时间】:2021-10-06 15:27:19
【问题描述】:
我想在控制器中测试一种从IHttpContextAccessor.HttpContext.Connection.RemoteIpAddress 检索值的方法。
是否可以自定义WebApplicationFactory 设置固定IP地址?
解决方法是将上面的表达式包装到服务中,以便对其进行模拟。
谢谢
Test.cs
var ipAddress = IPAddress.Parse("192.168.1.123");
var factory = new WebApplicationFactory<Startup>();
// ?
using var client = factory.CreateClient();
var response = await client.GetAsync(new Uri("https://localhost/test"), UriKind.Relative));
var ipAddress = await response.Content.ReadAsStringAsync();
TestController.cs
private readonly IHttpContextAccessor _httpContextAccessor;
public TestController(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
[HttpGet("test")]
public async Task<IActionResult> GetTest()
{
var ipAddressObj = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress;
var ipAddress = ipAddressObj?.ToString();
return Ok(ipAddress);
}
【问题讨论】:
标签: c# unit-testing asp.net-core