Значение заголовка не отправляется в ASP.NET Core API при создании метода jquery .ajax () - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть API в ядре asp.net:

[HttpPost]
public IActionResult Post([FromBody] Reservation res)
{
    StringValues key = Request.Headers["Key"]; // no header when making jquery .ajax() call


    return Ok(repository.AddReservation(new Reservation
    {
        Name = res.Name,
        StartLocation = res.StartLocation,
        EndLocation = res.EndLocation
    }));
}

Для этого API я выполняю вызов API с помощью метода jQuery AJAX () следующим образом:

$.ajax({
    url: "http://localhost:8888/api/Reservation",
    headers: {
        Key: "Key",
        Secret: "Secret@123"
    },
    method: "post",
    contentType: "application/json",
    data: JSON.stringify({
        Id: 0,
        Name: $("#Name").val(),
        StartLocation: $("#StartLocation").val(),
        EndLocation: $("#EndLocation").val()
    }),
    success: function (result, status, xhr) {
        console.log(result);
    },
    error: function (xhr, status, error) {
        console.log(xhr)
    }
});

Проблема в том, что заголовки не отправляются в API, потому что моя точка останова на этой строке StringValues key = Request.Headers["Key"]; не получает никакого значения заголовка, почему?

Я также хочу сказать вам, что значения параметра данных из .ajax () принимаются моим API, но не значениями заголовков. Помогите, пожалуйста?

Я могу легко отправлять заголовки, вызывая API через приложение ASP.NET MVC, но не с помощью jQuery.Работающий код:

[HttpPost]
public async Task<IActionResult> AddReservation(Reservation reservation)
{
    Reservation receivedReservation = new Reservation();
    using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Add("Key", "Secret@123");
        StringContent content = new StringContent(JsonConvert.SerializeObject(reservation), Encoding.UTF8, "application/json");

        using (var response = await httpClient.PostAsync("http://localhost:8888/api/Reservation", content))
        {
            string apiResponse = await response.Content.ReadAsStringAsync();
            try
            {
                receivedReservation = JsonConvert.DeserializeObject<Reservation>(apiResponse);
            }
            catch(Exception ex)
            {
                ViewBag.Result = apiResponse;
                return View();
            }
        }
    }
    return View(receivedReservation);
}

Скажите, пожалуйста, почему jQuery не может отправлять заголовки с помощью вызова API?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я решил это, установив заголовки, как показано ниже, во время вызова ajax:

headers: {
    Key: "Secret@123"
},
0 голосов
/ 13 февраля 2019

Попробуйте отправить заголовки, используя метод beforeSend и метод setRequestHeader:

$.ajax({
   url: "http://localhost:8888/api/Reservation",
   beforeSend: function(request) {
      request.setRequestHeader("Key", "Key");
      request.setRequestHeader("Secret", "Secret@123");
   },
   method: "post",
   contentType: "application/json",
   data: JSON.stringify({
       Id: 0,
       Name: $("#Name").val(),
       StartLocation: $("#StartLocation").val(),
       EndLocation: $("#EndLocation").val()
   }),
   success: function (result, status, xhr) {
       console.log(result);
   },
   error: function (xhr, status, error) {
       console.log(xhr)
   }
});

Надеюсь, это сработает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...