C# ASP.NET основной веб-api
Привет, я работаю над миграцией из ASP.NET веб-API для ASP.NET ядро и переписал приведенный ниже код с помощью .net core, но столкнулся с ошибками, где, как этот же код прекрасно работает в ASP.NET веб-API.
public class DataController : Controller { private IList<string> errors = new List<string>(); [HttpPost] [Route("data/import", Name = "DataImport")] public IActionResult Post() { var rawdata = ConvertToByteArray(Request.Body); //ASP.net core; error //var rawdata = ConvertToByteArray(Request.Content.ReadAsStreamAsync().Result); //ASP.net web api var rdrec = Encoding.UTF8.GetString(content).Split(new string[] { Environment.NewLine, @"\r" }, StringSplitOptions.None).ToList(); importdata(rdrec); if (errors.Count == 0) return Ok("POST"); else return Ok(errors); } private void importdata(IList<string> lines) { //string connectionString = @"Data Source=localhost;Initial Catalog=TEST_DB;Integrated Security=True"; string connectionString = ConfigurationManager.ConnectionStrings["SQLDBCONN"].ConnectionString; // Added this to appsettings.json file and get null reference error in ASP.net core; works fine in ASP.net web api var message = ""; var Data = from line in lines let data = line.Split(',') select new filedata { ID = data[0], Type = data[1], Status = data[2], Description = data[3] }; using (SqlConnection sqldbConnection = new SqlConnection(connectionString)) { sqldbConnection.Open(); foreach (var i in Data) { try { using (SqlCommand cmd = new SqlCommand("INSERT INTO [dbo].[testImport] ([ID], [Type], [Status], [Description]) VALUES (@ID, @Type, @Status, @Description)", sqldbConnection)) { cmd.Parameters.AddWithValue("@ID", i.ID); cmd.Parameters.AddWithValue("@Type", i.Type); cmd.Parameters.AddWithValue("@Status", i.Status); cmd.Parameters.AddWithValue("@Description", i.Description); cmd.ExecuteNonQuery(); } } catch (Exception ex) { message = ex.StackTrace; return (message); } } } } private byte[] ConvertToByteArray(Stream stream) { using (MemoryStream ms = new MemoryStream()) { stream.CopyTo(ms); return ms.ToArray(); } } }
В первую очередь сталкиваемся с ошибками в двух местах
1) Чтение сырых данных. Проблема, с которой я сталкиваюсь, заключается в том, что когда я тестирую метод post, я получаю сообщение об успехе, но данные не вставляются в таблицу. Когда я отлаживаю его, я вижу, что он читает только строку заголовка, но не строки. Я предполагаю, что это сбивает меня с толку на нижеприведенной строке кода.
var rawdata = ConvertToByteArray(Request.Body);
2) Установка строки подключения базы данных из appsettings.json ранее мне удалось получить строку подключения fine из файла web.config.
string connectionString = ConfigurationManager.ConnectionStrings["SQLDBCONN"].ConnectionString;
Что я уже пробовал:
Чтобы получить строку подключения базы данных sql во время выполнения, я помещаю строку подключения в файл appsettings.json, но не знаю, как ее вызвать в контроллере.
параметр appsettings.в JSON
{ "SQLDB": { "SQLDBCONN": { "MySQLConnStr": "Data Source=datamartprd.multco.us\\SQLSVR,2505;Initial Catalog=BISTG_CLOUD_QAT;User Id=dbsql_bidm__googleapps_qry;Password=wf#Gd5MZw9hJ;" } } }
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SQLDBCONN"))); }