有没有办法正确传递包含“?”的字符串.net核心Web API?

时间:2019-01-30 17:41:58

标签: c# .net-core asp.net-core-webapi

我执行以下操作,从自动完成输入中给出问题标题的情况下,从我的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 :(得分:1)

您需要使用 HttpUtility.UrlEncode -而不是 Decode 。您需要先将?更改为编码字符,然后再通过URL发送。 HttpUtility.UrlDecode则相反。