RestAPI C # и Python: не могу понять или решить код состояния 308

Я пытаюсь изучить RestApis и столкнулся с проблемой, на которую не могу найти ответа.

В скрипте Python я запускаю RestService с помощью пакета Flask RestApi.
Все конечные точки имеют GET, и я протестировал и проверил каждую конечную точку с помощью PostMan и веб-браузера.
В каждом из этих двух клиентов я получаю данные JSON, как и ожидал.

У меня есть консольное приложение C#, работающее как RestClient.
Здесь я получаю код статуса 308 (постоянное перенаправление).
Я не могу понять, почему я получаю этот код состояния.

Python RestService

      from flask import Flask
from flask import jsonify

app = Flask(__name__)

@app.route('/name/')
def nameEndpoint():
    return jsonify(
    {
        'name':"Some name"
    }), 200

if __name__ == '__main__':
    app.run()

RestService запускается локально в терминале Windows на моем компьютере.
URL-адрес RestService: http: // localhost:5000/

Мои C# RestClients

      var url = "http://localhost:5000/name";

public async Task TryWithRestSharp()
{
    var client = new RestSharp.RestClient(url);
    var result = await client.ExecuteAsync(new RestSharp.RestRequest());
    var json = foo.Content;
}

public async Task TryWithHttpClient()
{
    var client = new HttpClient();
    var json = await client.GetStringAsync(url);
}

Оба метода возвращаются с серверным кодом 308 (постоянное перенаправление).

RestSharp возвращает следующую информацию:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL:
<a href="http://localhost:5000/name/">http://localhost:5000/name/</a>.
If not click the link.

Я нашел это объяснение кода статуса 308:

      A 308 Permanent Redirect message is an HTTP response status code indicating that the 
requested resource has been permanently moved to another URI, as indicated by the 
special Location header returned within the response

Мои вопросы:

  • Как можно было «переместить» ресурс на другой URI?
  • Проблема в сервисе или в клиенте?
  • Что мне нужно сделать, чтобы это исправить?

2 ответа

Я нашел проблему!
Это было на стороне клиента.

      using RestSharp;   // NOTE: Not sure if this make any difference for the problem. But it nice to have.

var url = "http://localhost:5000/name/";   // NOTE: Make sure to end the URL with a slash.

public async Task TryWithRestSharp()
{
    var client = new RestClient(url);
    var request = new RestRequest(url, DataFormat.Json);
    var result = await client.ExecuteGetAsync(new RestRequest());
    var json = result.Content;
}

Мне не хватало последней косой черты в URL-адресе.
Это вызвало проблему.

Попробуйте так

https://restsharp.dev/getting-started/getting-started.html#basic-usage

      using RestSharp;
using RestSharp.Authenticators;

var client = new RestClient("your base url");

// if there is any auth
client.Authenticator = new HttpBasicAuthenticator("username", "password");

var request = new RestRequest("url prefix like url/name", DataFormat.Json);

var response = client.Get(request);
Другие вопросы по тегам