我想对内部API进行web请求,我发现大多数人都使用HTTPCLient,但我只是不想在控制器中硬编码依赖项或创建包装器,所以我决定尝试IWebRequestCreate。在运行应用程序时,我得到以下错误:
'Project.Web.Main.Controllers.HomeController'.:在尝试激活InvalidOperationException时,无法解析“System.Net.IWebRequestCreate”类型的服务
那是因为我在一开始还没有注册那个服务,所以当我尝试注册webrequest时,发现这是一个抽象类,我被迫使用create方法,所以有什么想法吗?
我在考虑像这样注册:
services.AddTransient<IWebRequestCreate>(x=>x.GetService(???));我的控制器非常基本:
public class HomeController : Controller
{
private readonly IWebRequestCreate _webRequest;
private readonly AppOptions _options;
public HomeController(IWebRequestCreate webRequest, IOptions<AppOptions> settings)
{
_webRequest = webRequest;
_options = settings.Value;
}
public IActionResult Index()
{
var wr = _webRequest.Create(new Uri(_options.ApiHost));
var response = wr.GetResponseAsync();
//TODO map the response to a DTO
return View();
}
}谢谢。
发布于 2016-06-16 00:04:20
最后,我为IWebRequestCreate创建了一个实现:
public class MyWebRequest: IWebRequestCreate
{
public WebRequest Create(Uri uri)
{
return WebRequest.Create(uri);
}
}并在项目配置中注册依赖项:
services.AddTransient(typeof(IWebRequestCreate),typeof(MyWebRequest));https://stackoverflow.com/questions/37801934
复制相似问题