Есть ли способ правильно передать строку, содержащую "?"к .net core web api? - PullRequest
0 голосов
/ 30 января 2019

У меня есть следующее действие, которое получает модель Вопроса из моего API, учитывая заголовок Вопроса из ввода автозаполнения.Действие отлично работает с заголовками, которые не содержат вопросительный знак (например, сколько вам лет).Но если я дам название, содержащее знак вопроса (например, сколько вам лет?), Модель не будет возвращена, поскольку знак вопроса удаляется в процессе.

Я пытался HttpUtility.UrlDecode() метод, но безудачи.

Ниже вы можете найти мои запросы

[HttpGet]
public async Task<IActionResult> GetQuestionAsync(string question) {
    Questions q = new Questions();
    HttpClient client = _api.Initial();
    HttpResponseMessage res = await client.GetAsync("api/Search/" + question);
    if (res.IsSuccessStatusCode) {
        var result = res.Content.ReadAsStringAsync().Result;
        q = JsonConvert.DeserializeObject<Questions>(result);
    }
    return View(q);
}

[Produces("application/json")]
[HttpGet]
[Route("{keyword}")]
public async Task<IActionResult> GetByString([FromRoute(Name = "keyword")] string keyword) {
    if (!ModelState.IsValid) {
        return BadRequest(ModelState);
    }
    var question = await _context.Questions
        .SingleOrDefaultAsync(m => m.Question == HttpUtility
            .UrlDecode(keyword.ToString()));

    if (question == null) {
        return NotFound();
    }
    return Ok(question);
}

Я ожидаю, что смогу получить вопросы, включая ?, из моего API.Есть ли способ достичь этого?

Обратите внимание, что в Swagger запрос API Get работает нормально!

1 Ответ

0 голосов
/ 30 января 2019

Вам необходимо использовать HttpUtility.UrlEncode - не Decode.Вы хотите изменить ? на закодированный символ перед отправкой его в URL.HttpUtility.UrlDecode делает наоборот.

...