簡體   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