表值参数不适用于Get方法

问题描述 投票:0回答:1

实际上我正在使用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);
        }
    }

[在我的情况下使用大摇大摆执行此代码时,表值参数始终以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一起使用?问候

c# dapper table-valued-parameters
1个回答
0
投票

在您的情况下,您想将对象数组作为URL中的查询字符串发送,我认为这是不可能的,但是您可以发送基本数据类型的数组,例如int,string等。

© www.soinside.com 2019 - 2024. All rights reserved.