Queridos todos, tengo el siguiente controlador,

[Route("[action]/{phone}/{password}", Name="PhoneLogin")]
[HttpGet]
public async Task<ActionResult<User>> PhoneLogin(string phone, string password)
{
    var response = await _repository.PhoneLogin(phone, password);
    if (response == null) { return NotFound(); }
    return Ok(_mapper.Map<UserReadDto>(response));
}

        public async Task<User> PhoneLogin(string phone, string pass)
    {
        StringCipher s = new StringCipher();
        using (SqlConnection sql = new SqlConnection(_connectionString))
        {
            using (SqlCommand cmd = new SqlCommand("spPhoneLogin", sql))
            {
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@phone", phone));
                cmd.Parameters.Add(new SqlParameter("@password", s.EncryptString(pass)));

                User response = null;
                await sql.OpenAsync();

                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        response = MapToValue(reader);
                    }
                }

                return response;
            }
        }
    }

Soy nuevo en las API. Estoy intentando enviar dos parámetros con la solicitud. y cómo se construye el URI en ese caso.

0
ahmad noori 31 ago. 2020 a las 18:39

1 respuesta

La mejor respuesta

Según su atributo de enrutamiento [Route("[action]/{phone}/{password}", Name="PhoneLogin")], se puede acceder al método en / PhoneLogin / anyString / anyOtherString donde anyString estaría vinculado a phone y anyOtherString a contraseña .

Si tiene un atributo de ruta adicional en la clase de controlador, como [Route("[controller]")], el nombre de su controlador también debe agregarse, lo que da como resultado / MyControllerName / PhoneLogin / anyString / anyOtherString .

Eche un vistazo más de cerca a la documentación en enlace de modelo y conceptos básicos de enrutamiento. El enlace de modelo predeterminado sigue un orden predefinido, que (según la documentación) es

  1. Campos de formulario
  2. El cuerpo de la solicitud (para controladores que tienen el atributo [ApiController]).
  3. Datos de ruta
  4. Consultar parámetros de cadena
  5. Archivos subidos

Entonces, dado que no se proporcionan campos de formulario ni cuerpo de solicitud (que es el caso más común para una solicitud de obtención), los datos de ruta se utilizan para vincular los dos parámetros.

0
johnmoarr 31 ago. 2020 a las 17:03