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);