ASP.NET Core 2.1 API не принимает параметры - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь передать параметр из моего API, но, похоже, он его не принимает.У меня есть lastName (в конечном итоге будет заменено уникальным идентификатором), который я хочу передать, что в конечном итоге приведет к просмотру профиля или этому человеку.

Вот мой контроллер API:

   public class GetInquiryController : BaseController
{
    private GetInquiry manager;
    public GetInquiryController(IConfiguration config) : base(config)
    {
        manager = new GetInquiry(config);
    }

    [HttpGet]
    [Route("api/[controller]")]
    public IEnumerable<InquiryModel> Get(string lastName)
    {
        return manager.GetInquiriesByUser(lastName);
    }
 }

И моя логика для моей хранимой процедуры, которая получает фамилию

  public class GetInquiry
{
    private readonly IConfiguration configuration;

    public GetInquiry(IConfiguration config)
    {
        configuration = config;
    }

    public IEnumerable<InquiryModel> GetInquiriesByUser(string lastName)
    {
        string ApplicationDB = configuration.GetConnectionString("ApplicationDB");
        List<InquiryModel> lstinquiry = new List<InquiryModel>();
        using (SqlConnection con = new SqlConnection(ApplicationDB))
        {
            SqlCommand cmd = new SqlCommand("spGetInquiriesByUser", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter lastNameParameter = cmd.Parameters.Add("lastName", SqlDbType.Char, 10);
            lastNameParameter.Value = lastName;
            con.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                InquiryModel inquiry = new InquiryModel();
                //inquiry.FormID = rdr["FormID"].ToString();
                inquiry.firstName = rdr["firstName"].ToString();
                inquiry.lastName = rdr["lastName"].ToString();
                inquiry.SID = rdr["SID"].ToString();
                inquiry.email = rdr["email"].ToString();
                inquiry.phone = rdr["phone"].ToString();
                inquiry.email = rdr["email"].ToString();
                inquiry.employer = rdr["street"].ToString();
                inquiry.city = rdr["city"].ToString();
                inquiry.state = rdr["state"].ToString();
                inquiry.zip = rdr["zip"].ToString();
                inquiry.date = rdr["date"].ToString();
                inquiry.comment = rdr["comment"].ToString();

                lstinquiry.Add(inquiry);
            }
            con.Close();
        }
        return lstinquiry;
    }
  }
}

Я использую VUE.js и вызываюмой API

methods: {
  editItem(lastName) {
    let id = lastName
    this.$http.get('http://localhost:61601/api/GetInquiry/', {
      id: lastName
    }),

Я пытался использовать свою логику без IEnumerable, что, как я не думал, будет иметь значение в этом случае.

Полагаю, хорошо, что я получаю

"SqlException: процедура или функция spGetInquiriesByUser 'ожидает параметр' @lastName ', который не был предоставлен"

при вводе моего маршрута API в браузер, но когда я добавляю lastName в конец моего маршрута или Почтальона, я получаю пустую страницу.

Надеюсь, что это имеет смысл, пожалуйста, дайте мне знать, если мне нужно предоставить более подробную информацию и если кто-то может указать мне правильное направление!

1 Ответ

0 голосов
/ 14 ноября 2018

Вам необходимо определить, откуда следует читать ваш параметр lastName.

Если вы хотите прочитать его с маршрута, используйте атрибут FromRoute

[HttpGet("{lastName}")] //api/GetInquiry/yourlastname
public IEnumerable<InquiryModel> Get([FromRoute]string lastName)
{
    return manager.GetInquiriesByUser(lastName);
}

Если вы хотите прочитать его из строки запроса, используйте атрибут FromQuery

[HttpGet] //api/GetInquiry?lastName=yourlastname
public IEnumerable<InquiryModel> Get([FromQuery]string lastName)
{
    return manager.GetInquiriesByUser(lastName);
}

Примечание : вышеуказанное решение работает при перемещении [Route("api/[controller]")] поверх класса GetInquiryController.

Обновление Когда вы добавили свой вызов API vue.js, он больше понимает, почему это не работает, вы фактически вызываете параметр lastName по имени идентификатора. Изменение вашей id id на lastName будет работать с выше

methods: {
  editItem(lastName) {
    this.$http.get('http://localhost:61601/api/GetInquiry/', {
      lastName: lastName
    }),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...