我的控制器通过调用API实习生返回用户详细信息
public class HomeController : Controller
{
public ActionResult AccountDetails(int userId)
{
return this.Content(new WebHelperService().GetAccountDetails(userId)), "application/json");
}
}
这是我的WebHelperService,位于业务层,我需要从appsettings.json获取价值
public class WebHelperService
{
private string url = null;
public WebHelperService()
{
//url = ConfigurationManager.ConnectionString["ExternalApiUrl"].ToString();
// ConfigurationManager is not available in .net core.
//So How do i read ExternalApiUrl from appsettings.josn,Which is the best way
}
public string GetAccountDetails(int userId)
{
return WebCall("{'userId':" + userId + "}");
}
private string WebCall(string data)
{
WebRequest request = WebRequest.Create(url);
// get the data from url and returns it
}
}
答案 0 :(得分:1)
让我们暂时忘掉您的特定用例,然后只谈谈.net核心中的设置。重要的是,我认为您正在尝试从您的班级访问原始AppSettings,但您实际想要做的是将它们引入您的班级。所以,让我们这样做。
考虑一下appSettings.json类似于下面的内容:
{
"myConfiguration": {
"myProperty": true
}
}
现在您需要创建一个POCO来保存这些设置。像这样:
public class MyConfiguration
{
public bool MyProperty { get; set; }
}
在您的startup.cs中,您应该有一个名为" ConfigureServices"的方法。在那里,你打算打电话给"配置"你的设置是这样的。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}
所以现在你想把这个设置对象注入一个类。我们暂时将其称为MyClass。它看起来如下:
public class MyClass : IMyClass
{
private readonly MyConfiguration _myConfiguration;
public MyClass(IOptions<MyConfiguration> myConfiguration)
{
_myConfiguration = myConfiguration.Value;
}
}
现在您可以访问您的配置了!
<强>加成!强>
相反,您可以使您的ConfigureServices方法如下所示:
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}
现在的做法是将您的服务绑定到实际的类,而不是IOptions对象。
现在当你将它注入你的类时,你会注入POCO设置类,而不是IOptions。像这样:
public class MyClass : IMyClass
{
private readonly MyConfiguration _myConfiguration;
public MyClass(MyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;
}
}
进一步阅读: