Передача нескольких параметров получения в WebApi - PullRequest
0 голосов
/ 12 июня 2019

Я работаю над приложением asp.net core 2.2.Я хочу передать два параметра (токен и токен обновления) веб-интерфейсу asp.net core 2.2 для получения нового токена.Когда я передаю значения, я получаю ошибку

Произошло необработанное исключение при обработке запроса.AggregateException: произошла одна или несколько ошибок.(Код состояния ответа не указывает на успешность: 404 (не найдено).) System.Threading.Tasks.Task.Wait (int millisecondsTimeout, CancellationToken cancellationToken) HttpRequestException: Код состояния ответа не указывает на успешность: 404 (не найдено).

Это правильный способ передачи нескольких параметров и маршрутизации?

requestUrl построен следующим образом:

string requestUrl = string.Format(Token_RefreshUserToken + "/{0}"+"/{1}", token,refreshToken);

значение requestUrl (имя контроллера веб-API 'Token'):

"Token/Refresh/eyJhbGciOiJIQrI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InJlZnJhbmNpc0BzdXlhdpdGkuY54tIiwiZXhwIojxNTYwMzMyOTk7hCJpc3MiOiJodHRwOi8vd3d3LnNlY3WeaXR5Lm9yZyIsImF1ZCI3rdh0dHA6Ly93d3cuc2VjdXJpdHkub3JnIn0.2Iw0VS_OgMjfpgt5V27mjCuLLqzlZBgRMpYgCTEHRP88E/IDwRYkf9idsVrBhBJJ5ymS+8RrZuSBSl+wywuKCs+Bw="

Клиент:

Task<TokenModel> userToken = _commonHelper.RecreateUserToken(tokenModel.TokenVal, tokenModel.RefreshToken);
userToken.Wait();

public async Task<TokenModel> RecreateUserToken(string token, string refreshToken)
    {          
         string url = string.Format(WebApiConstants.Token_RefreshUserToken + "/{0}"+"/{1}", token,refreshToken);
         var statusResponse = await _ApiHelper.GetAsync(url);
         tokenData = await statusResponse.Content.ReadAsAsync<TokenModel>();
return tokenData;
     }

Метод веб-API:

[HttpGet]
[Route("Refresh/{token}/{refreshToken}")]
public async Task<TokenValue> Refresh(string token, string refreshToken){   //logic     }

1 Ответ

0 голосов
/ 13 июня 2019

Кажется, что запрос, содержащий double escape sequence, вызвал проблему. В режиме разработки попробуйте запустить проект web api с Kestrel вместо IIS express.

Приложение ASP.NET Core может быть размещено на различныхвеб-серверы (IIS, Kestrel, Nginx, Apache, ...).Все эти веб-серверы ничего не знают о фильтрации запросов (и, в частности, о разрешении двойного побега), которая является встроенной функцией IIS.Это проблема хостинга, и приложение ASP.NET Core не должно заниматься этим напрямую.Если URL-адрес, такой как http://youserver.com/Home/Phone/+12345, достигнет конвейера ASP.NET Core, знак плюс не будет обрабатываться каким-либо особым образом и попадет в строковую модель как символ +.

При размещении приложения в IISweb.config все еще используется, поэтому вы можете настроить <requestFiltering allowDoubleEscaping="true"/> как для обычного приложения ASP.NET.

<system.webServer>
<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

Если вы хотите разместить приложение на другом веб-сервере,Вы должны проверить, как он обрабатывает специальные символы.Kestrel будет просто передавать такие URL-адреса как есть, поэтому вам не нужно предпринимать какие-либо конкретные действия, если они размещены на Kestrel.

См. здесь

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