Member 12586110 Ответов: 1

Asp.net основной веб-api


Привет, я пытаюсь прочитать потоковые данные и записать их в таблицу в asp.net ядро 2.2 веб-api и работает с ошибками.

public class HomeController : Controller
{
    private readonly DbContext _context;
    private readonly IConfiguration Configuration;

    public HomeController(DbContext context, IConfiguration configuration)
    {
        _context = context;
        //_roleManager = roleManager;
        Configuration = configuration;
    }

    [HttpPost]
    [Route("api/v1/test", Name = "Test")]
    public Task Post()
    {
        try
        {
            using (var records = new StreamReader(Request.Body, Encoding.UTF8))
            {
                ImportData(records);
                return Ok("OK"); //Error: Cannot implicitly convert type 'Microsoft.AspNetCore.Mvc.OkObjectResult' to 'System.Threading.Tasks.Task'

            }
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message); //Error: Cannot implicitly convert type 'Microsoft.AspNetCore.Mvc.BadRequestObjectResult' to 'System.Threading.Tasks.Task'

        }
    }
    public void ImportData(StreamReader records)
    {
        string connectionstring = Configuration["ConnectionStrings:dbconnstr"];

        List test = new List();

        foreach (string record in records)
        {
            Test t = new Test();
            string[] textpart = record.Split('|');
            t.ID = textpart[0];
            t.Name = textpart[1];
            test.Add(t);
        }
        var copyParameters = new[]
            {
            nameof(Test.ID),
            nameof(Test.Name),
            };
        using (var sqlCopy = new SqlBulkCopy(connectionstring))
        {
            sqlCopy.DestinationTableName = "[Test]";
            sqlCopy.BatchSize = 500;
            using (var reader = ObjectReader.Create(test, copyParameters))
            {
                sqlCopy.WriteToServer(reader);
            }
        }
    }
}


Что я уже пробовал:

Я попробовал приведенный выше код, который немного отличается от .net 4.6 framework, и попытался заставить его работать.

Mehul M Thakkar

попробуйте с помощью "асинхронной задачи"

Member 12586110

Привет, Мехул м Таккар, большое спасибо за ваш ответ. Попробовал асинхронную задачу и все равно получил ту же ошибку.

ZurdoDev

Чем мы можем вам помочь? Вы не сказали нам, что это за ошибки.

Member 12586110

Привет, Зурдодев, Спасибо за ваш ответ. Я пытаюсь прочитать поток данных с помощью класса StreamReader и записать содержимое в таблицу базы данных как часть метода post. Этот подход используется, чтобы нормально работать в .объем 4.6 рамках. Когда я пишу это, я получаю исключения, когда использую return и не могу импортировать в таблицу. Не могли бы вы пожалуйста помочь или направить меня написать об этом .объем ядра 2.2.

ZurdoDev

Нет, я не могу вам помочь, потому что, как я уже сказал, Вы не сказали нам, в чем заключаются ошибки.

Member 12586110

Привет ZurdoDev, с возвращением Ok("OK"); получите ошибку: не удается неявно преобразовать тип 'Microsoft.AspNetCore.Mvc.OkObjectResult' to 'system.Нарезание резьбы.Задачи.Задач и
return BadRequest(ex.Message); Get Error: не удается неявно преобразовать тип 'Microsoft.AspNetCore.Mvc.BadRequestObjectResult' to 'system.Нарезание резьбы.Задачи.Задача". Спасибо.

ZurdoDev

Теперь это совсем другой вопрос, чем то, что вы говорили раньше.

Если вы хотите вернуть представление, имя которого не совпадает с именем метода, в котором вы находитесь, верните представление(viewName);

1 Ответов

Рейтинг:
2

Simon_Whale

Edit - просто прочитайте ваш вопрос еще раз, хотя я бы использовал IFormFile для передачи файлов с помощью webapi, но это мое личное предпочтение

ваша ошибка заключается в сигнатуре вашего метода

public Task Post()


должно быть

public Task<IactionResult> Post()