Flurl: сбой вызова с кодом состояния 308 (постоянная переадресация), но без автоматической переадресации - PullRequest
0 голосов
/ 01 апреля 2020

Я использую Flurl для выполнения вызовов REST API. Я спотыкаюсь об исключении HttpStatusCode 308, потому что это не приведет к автоматическому перенаправлению c.

`var url = kundenServiceUrl
                .AppendPathSegment("kunde")
                .AppendPathSegment(kundeNr)
                .WithHeaders(new
                {
                    accept = "application/json", ...


                })
                .WithOAuthBearerToken(xxx);

await url ... создает исключение «Ошибка вызова с кодом состояния 308 (постоянное перенаправление)» В документации REST API говорится, что 308 генерируется, когда «kundeNr» является дублетом и перенаправляет на новый «kundeNr».

.AllowHttpStatus ("308") подавить исключение, но я не могу получить никакой информации о перенаправлении (без заголовка местоположения в url.headers).

Как мне добиться автоматизации c редирект? (В почтальоне работает нормально)

1 Ответ

0 голосов
/ 01 апреля 2020

308 должен автоматически перенаправить по умолчанию. Несколько вещей для проверки:

  1. Пытается ли он go из безопасного в небезопасный (https to http)? Это не будет автоматически перенаправлять.

  2. Есть ли шанс, что он попадет в редирект l oop? Это будет короткое замыкание на 50 по умолчанию. (Я сомневаюсь, что это работает в Почтальоне.)

  3. Вы предоставляете свой собственный HttpClient или HttpMessageHandler для Flurl через пользовательскую фабрику ? Убедитесь, что вы используете HttpClientHandler с AllowAutoRedirect, установленным на true.

Если это не так, я немного озадачен. Я скажу, что по крайней мере поведение исключения немного изменится в 3.0. В 2.x Flurl бросает всякий раз, когда IsSuccessStatusCode ложно, что означает что-либо за пределами 2xx. 3.0 будет генерировать только при> = 400, поэтому отключенные перенаправления не будут генерироваться. Есть также некоторые необычные новые функции , связанные с скорыми переадресациями, которые дадут вам больший контроль, поэтому, хотя я не могу объяснить, что здесь произошло, если ни одна из 3 вышеописанных ситуаций не подходит, вы должны иметь возможность заставить дело. Следуйте этой проблеме GitHub, чтобы получать уведомления, когда она будет выпущена (или просто следуйте @ FlurlHttp в Twitter).

...