Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从appsettings.json到BusinessLayer(我的助手类)MVC 6获取值_C#_Asp.net Core Mvc - Fatal编程技术网

C# 如何从appsettings.json到BusinessLayer(我的助手类)MVC 6获取值

C# 如何从appsettings.json到BusinessLayer(我的助手类)MVC 6获取值,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我的控制器,通过调用API实习生返回用户详细信息 public class HomeController : Controller { public ActionResult AccountDetails(int userId) { return this.Content(new WebHelperService().GetAccountDetails(userId)), "application/

我的控制器,通过调用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
            }
        }
    
  • 我需要从mvc6中的控制器一直携带设置吗? 参考:)

  • 让我们暂时忘记您的特定用例,只谈一下.NETCore中的一般设置。重要的是,我认为您正在尝试从类中访问原始AppSettings,但实际上您想要做的是将它们DI到类中。那我们就这么做吧

    假设您有一个类似于以下内容的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"));
    }
    
    进一步阅读:


    1。如果我想在应用程序的不同位置使用MyClass,如何通过提供MyConfiguration来创建MyClass实例?。(假设我想从MyClassB访问MyClass的实例)然后使用DI并将该类注入ClassB的构造函数中。答案是:但问题是:为什么我要将设置从控制器一直带到负责执行操作的类。假设负责进行web调用的WebService类位于我的业务层(MVC6+N层体系结构),那么MVC6中的DI意味着我应该将我的web调用设置(从appsettings.json读取)从控制器带到业务层WebService类?
    public class MyClass : IMyClass
    {
        private readonly MyConfiguration _myConfiguration;
    
        public MyClass(IOptions<MyConfiguration> myConfiguration)
        {
            _myConfiguration = myConfiguration.Value;
        }
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        //services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
        services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
    }
    
    public class MyClass : IMyClass
    {
        private readonly MyConfiguration _myConfiguration;
    
        public MyClass(MyConfiguration myConfiguration)
        {
            _myConfiguration = myConfiguration;
        }
    }