У меня очень простой веб-сервис с одним методом GET, который имеет параметр строки токена.Я использую этот токен, может иметь буквы "+" и "/".Пример: mC1SW7RJhgsQGtRHhsg / Q + FGoZjbBleNKtpqT7zLMtE
Я использую этот токен для поиска в базе данных, если есть данные для этого токена.
Мой метод в контроллере такой:
[HttpGet("{token}")]
[ProducesResponseType(typeof(string), 200)]
[ProducesResponseType(typeof(void), 404)]
public JsonResult Get(string token)
{
string sql = "SELECT dataObject FROM Session WHERE id = @SessionToken";
var data = _conn.QueryFirstOrDefault<Session>(sql, new {SessionToken = token});
if (data == null){
var r = Json(string.Empty);
r.StatusCode = StatusCodes.Status404NotFound;
return r;
}
else {
return Json(JsonConvert.DeserializeObject(data.dataObject));
}
}
Я вижу, что Dapper / Webapi автоматически экранирует этот параметр и, например, меняет "/" на "% 2F".
При развертывании он работает только для токенов без специальных символов и возвращает 404.
В качестве обходного пути я изменил токен на сервере для кодирования токена и заменил закодированный знак плюс на пробел:
string decodedToken = WebUtility.UrlDecode(token);
token = decodedToken.Replace(" ", "+");
Проблема заключается в том, что мне нужно, чтобы мои клиенты делали обратное и заменялизнак «+»:
var encodedToken = WebUtility.UrlEncode(token);
// Convert '+' to ' '
token = encodedToken.Replace("%2B", " ");
Каков рекомендуемый способ работы, не требуя от клиента замены знаков «+»?