我的服务中托管了Identity Server 4。它公开了各种端点,我想从同一服务访问token
端点。
它不公开任何接口,因此我可以将其作为依赖项注入,因此我必须发出一个http请求。
现在,我像这样设置HttpClient
的网址:
var req = _contextAcessor.HttpContext.Request;
var baseAddr = $"{req.Scheme}://{req.Host}";
client.BaseAddress = new Uri(baseAddr);
var addr = _urlHelperProvider.GetUrlHelper().Content("~/connect/token");
我不喜欢它,因为这里甚至没有使用localhost
。但是服务可能绑定到localhost上的其他端口,并且我不知道如何获取传递到UseUrls
方法的URL列表。
理想情况下,我希望将绑定到我的服务的客户端实例与WebApplicationFactory.CreateClient
方法的工作方式类似。
答案 0 :(得分:0)
希望在这里找到答案,但最终使其成功了 因此,希望这可以对某人有所帮助
在创建客户端时,使用https设置主机通常可能会有所帮助 它应等于在本地运行应用程序时默认情况下拥有的任何主机
_factory = new WebApplicationFactory<Startup>().WithWebHostBuilder(BuildHost);
Client = _factory.CreateClient(new WebApplicationFactoryClientOptions()
{
BaseAddress = new System.Uri("https://localhost:5031")
});
然后您的请求很简单:
var parameters = new Dictionary<string, string> { { "grant_type", "client_credentials" },
{ "scope", "SomeScope" },
{ "client_id", "YourClientId" }, { "client_secret", "yoursecret" } };
var encodedContent = new FormUrlEncodedContent(parameters);
var response = await Client.PostAsync("/connect/token", encodedContent);
已经在本地测试过,并且可以正常工作 如果您的设置仍有问题,请告诉我, 应该能够提供帮助