Параметры табличных значений не работают с методом Get - PullRequest
0 голосов
/ 14 октября 2019

На самом деле я работаю, используя dapper.

LoginAuditModel:

public class LoginAuditModel
    {
        public IList<GuidIdTableType> UserIdTableType { get; set; } = new List<GuidIdTableType>();
        public DateTime StartingDate { get; set; }
        public DateTime EndingDate { get; set; }
    }

Репозиторий:

  public async Task<IEnumerable<LoginAuditGetViewModel>> LoginAuditGet(LoginAuditModel model)
        {
            try
            {
                async Task<IEnumerable<LoginAuditGetViewModel>> DoLoginAuditGet()
                {
                    using (var connection = _connectionManager.GetOpenConnection(_configuration.GetConnectionString(connectionstring)))
                    {
                        return await connection.QueryAsync<LoginAuditGetViewModel>("[dbo].[spName]", param: new
                        {
                            UserIdTableType = ((List<GuidIdTableType>)model.UserIdTableType).ToDataTable(),
                            model.StartingDate,
                            model.EndingDate
                        }
                          , commandType: CommandType.StoredProcedure);
                    }
                }
                return await DoLoginAuditGet();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

Служба:

 public async Task<IEnumerable<LoginAuditGetViewModel>> LoginAuditGet(LoginAuditModel model)
        {
            async Task<IEnumerable<LoginAuditGetViewModel>> DoLoginAuditGet()
            {
                return await _employeeRepository.LoginAuditGet(model);
            }
            return await DoLoginAuditGet();
        }

Контроллер:

[HttpGet]
    public async Task<IActionResult> LoginAuditGet([FromQuery]LoginAuditModel model)
    {
        try
        {
            async Task<IActionResult> DoLoginAuditGet()
            {
                var rModel = await _employeeService.LoginAuditGet(model);
                if (rModel is null || !rModel.Any()) return NotFound();
                return Ok(rModel);
            }
            return await DoLoginAuditGet();
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }

Когда я выполняю этот код с использованием swagger в моем случае, табличный параметр всегда передается с count = 0 (UserIdTableType), но по какой-то причине, когда я изменяю метод контроллера на [HttpPost]это передать параметр правильно! и все работает нормально:

[HttpPost]
        public async Task<IActionResult> LoginAuditGet(LoginAuditModel model)
        {
            try
            {
                async Task<IActionResult> DoLoginAuditGet()
                {
                    var rModel = await _employeeService.LoginAuditGet(model);
                    if (rModel is null || !rModel.Any()) return NotFound();
                    return Ok(rModel);
                }
                return await DoLoginAuditGet();
            }
            catch (Exception ex)
            {
                return InternalServerError(ex);
            }
        }

Итак, мой вопрос: почему он работает как метод Post, а не как Get? Мне нужно что-то изменить, чтобы работать с Get? Привет

1 Ответ

0 голосов
/ 14 октября 2019

В вашем случае вы хотите отправить массив объектов в виде строки запроса в URL, я думаю, что это невозможно, но вы можете отправить массив базовых типов данных, таких как int, string ... и т. Д.

но в Post and Put он отправляет данные как тело и имеет другой тип передачи данных.

и вы должны знать, что есть ограничение на длину строки запроса, вы можете посмотретьздесь: нажмите меня

...