繁体   English   中英

如何从没有实体框架的.NET Core 2.1 Web API中检索类中的连接字符串

[英]How to retrieve connection string in class from .NET Core 2.1 Web API w/o Entity Framework

我有一个.NET Core 2.1 Web API服务,我希望从appsettings.json文件中检索连接字符串,并在我编写的单独数据库类中使用它。 我不需要或不想使用Entity Framework,遗憾的是,所有MS文档都只显示EF示例。 我已经尝试了大约10种不同的技术,但似乎无处可去。

这是appsettings.json文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=MAXIMUS,61433;Database=Geolocation;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

和startup.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace GeoLocationService1
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            //app.UseHttpsRedirection();
            app.UseMvc();
        } 
    }
}

我用来从存储过程中获取结果的类:

using Microsoft.Extensions.Configuration;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Configuration;

namespace GeoLocationService1
{
    [DataObject(true)]
    public class ip2location_data
    {
        public static string GetConnStr()
        {
            // ?????
            string dbconn = ""; //need to somehow get the connection string from the appsettings.json file
            return dbconn;
        }

        public static string LastErrorMsg = string.Empty;

        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public static ip2location GetGeoLocationFromIP(string IPAddress)
        {
            ip2location O = new ip2location();

            using (SqlConnection conn = new SqlConnection(GetConnStr()))
            {
                using (SqlCommand cmd = new SqlCommand("GetGeoLocationFromIP", conn))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandTimeout = 30;
                    cmd.Parameters.AddWithValue("@IPAddress", IPAddress);

                    conn.Open();

                    try
                    {
                        using (SqlDataReader rs = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            if (rs.Read())
                            {
                                O.country_code = rs.GetString(rs.GetOrdinal(O.fld_country_code));
                                O.country_name = rs.GetString(rs.GetOrdinal(O.fld_country_name));
                                O.region_name = rs.GetString(rs.GetOrdinal(O.fld_region_name));
                                O.city_name = rs.GetString(rs.GetOrdinal(O.fld_city_name));
                                O.zip_code = rs.GetString(rs.GetOrdinal(O.fld_zip_code));
                                O.time_zone = rs.GetString(rs.GetOrdinal(O.fld_time_zone));
                            }
                        }
                        LastErrorMsg = string.Empty;                   
                    }
                    catch (Exception ex)
                    {
                        LastErrorMsg = ex.Message;
                    }
                }
            }

            return O;
        }
    }
}

我想也许最好将连接字符串保存在一个单独的文本文件中并以这种方式读取 - 但宁愿以正确的方式进行。 任何帮助都表示赞赏(是的,我是.NET Core的新手,但没有看过不依赖于EF的教程)。

你需要导入:

using Microsoft.Extensions.Configuration;

在getConnStr中写下以下代码:

 IConfigurationBuilder builder = new ConfigurationBuilder()
             .SetBasePath(Directory.GetCurrentDirectory())
             .AddJsonFile("appsettings.json");

 IConfiguration Configuration = builder.Build();
 return Configuration["ConnectionStrings:DefaultConnection"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM