Hier wird die Anfrage unter Berücksichtigung des Tokens gesendet: < /p>
Code: Select all
public class FirebaseAuthHttpMessageHandler : DelegatingHandler
{
private readonly IGoogleAuthenticationService _googleAuthenticationService;
public FirebaseAuthHttpMessageHandler(IGoogleAuthenticationService googleAuthenticationService)
{
_googleAuthenticationService = googleAuthenticationService;
}
protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
string? firebaseToken = await _googleAuthenticationService.GetFreshToken();
if (firebaseToken != null)
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", firebaseToken);
return await base.SendAsync(request, cancellationToken);
}
}
< /code>
Meine Abfrage: < /p>
public interface IGetSummaryFromChatGPTQuery
{
[Post("/api/openai/summary")]
Task Execute([Body] SummaryRequest request);
}
< /code>
Verwenden der Abhängigkeitsinjektion, ich lade all dieses Zeug in das Projekt: < /p>
builder.Services.AddTransient();
builder.Services.AddRefitClient().
ConfigureHttpClient(c => c.BaseAddress = new Uri(serverBaseURL)).
AddHttpMessageHandler();
< /code>
Modell zum Senden und Empfangen von Daten: < /p>
public class SummaryRequest
{
public string Content { get; set; } = string.Empty;
public string Result { get; set; } = string.Empty;
public string Error { get; set; } = string.Empty;
}
< /code>
Der Dienst, in dem die Anforderung mit Abfrage erstellt wird: < /p>
public class OpenAIAPIRequestService : IOpenAIAPIRequestService
{
private readonly IGetSummaryFromChatGPTQuery _getSummaryFromChatGPTQuery;
public OpenAIAPIRequestService(
IGetSummaryFromChatGPTQuery getSummaryFromChatGPTQuery)
{
_getSummaryFromChatGPTQuery = getSummaryFromChatGPTQuery;
}
public async Task GetSummaryAsync(string content)
{
var requestData = new SummaryRequest
{
Content = content
};
SummaryRequest response;
try
{
response = await _getSummaryFromChatGPTQuery.Execute(requestData);
if (!string.IsNullOrWhiteSpace(response.Error))
throw new Exception(response.Error);
}
catch (Exception)
{
throw;
}
return response;
}
}
< /code>
Program.cs
using Data_Organizer_Server.Interfaces;
using Data_Organizer_Server.Services;
using FirebaseAdmin;
using FirebaseAdminAuthentication.DependencyInjection.Extensions;
using Google.Apis.Auth.OAuth2;
namespace Data_Organizer_Server
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddAuthorization();
builder.Services.AddSingleton(FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromJson(builder.Configuration.GetValue("FIREBASE_CONFIG"))
}));
builder.Services.AddFirebaseAuthentication();
builder.Services.AddScoped();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
}
}
}
< /code>
Controller:
using Data_Organizer_Core;
using Data_Organizer_Server.Interfaces;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Data_Organizer_Server.Controllers
{
[Authorize]
[ApiController]
[Route("api/openai")]
public class OpenAIController : ControllerBase
{
private readonly IOpenAIService _openAIService;
public OpenAIController(IOpenAIService openAIService)
{
_openAIService = openAIService;
}
[HttpPost("summary")]
public async Task GetSummary([FromBody] SummaryRequest request)
{
if (request == null || string.IsNullOrWhiteSpace(request.Content))
{
return BadRequest("Порожній запит або відсутній контент!");
}
try
{
request.Result = await _openAIService.GetSummary(request.Content);
return Ok(request);
}
catch (Exception ex)
{
request.Error = ex.Message;
return StatusCode(500, request);
}
}
}
}
< /code>
The error that appears:
System.Net.Http.HttpRequestException: 'Connection failure'.
< /code>
StackTrace:
System.Net.Http.HttpRequestException
Message=Connection failure
Source=Mono.Android
StackTrace:
at Xamarin.Android.Net.AndroidMessageHandler.c__DisplayClass137_0.b__0() in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 562
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.c.b__281_0(Object obj)
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Xamarin.Android.Net.AndroidMessageHandler.DoProcessRequest(HttpRequestMessage request, URL javaUrl, HttpURLConnection httpConnection, CancellationToken cancellationToken, RequestRedirectionState redirectState) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 616
at Xamarin.Android.Net.AndroidMessageHandler.DoSendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs:line 482
at Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.g__Core|5_0(HttpRequestMessage request, Boolean useAsync, CancellationToken cancellationToken)
at Data_Organizer.APIRequestTools.FirebaseAuthHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in C:\Users\bredu\Documents\ShortNotes\Data_Organizer\APIRequestTools\FirebaseAuthHttpMessageHandler.cs:line 22
at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.g__Core|5_0(HttpRequestMessage request, Boolean useAsync, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at Refit.RequestBuilderImplementation.c__DisplayClass15_0`2.d[[Data_Organizer_Core.SummaryRequest, Data_Organizer_Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Data_Organizer_Core.SummaryRequest, Data_Organizer_Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext() in c:\temp\releaser\refit\Refit\RequestBuilderImplementation.cs:line 331
--- End of stack trace from previous location ---
at Refit.Implementation.Generated.Data_OrganizerAPIRequestToolsIGetSummaryFromChatGPTQuery.global::Data_Organizer.APIRequestTools.IGetSummaryFromChatGPTQuery.Execute(SummaryRequest request) in C:\Users\bredu\Documents\ShortNotes\Data_Organizer\obj\Debug\net8.0-android\InterfaceStubGeneratorV2\Refit.Generator.InterfaceStubGeneratorV2\IGetSummaryFromChatGPTQuery.g.cs:line 50
at Data_Organizer.Services.OpenAIAPIRequestService.GetSummaryAsync(String content) in C:\Users\bredu\Documents\ShortNotes\Data_Organizer\Services\OpenAIAPIRequestService.cs:line 35
at Data_Organizer.MVVM.ViewModels.MainPageViewModel.PlayAISummary() in C:\Users\bredu\Documents\ShortNotes\Data_Organizer\MVVM\ViewModels\MainPageViewModel.cs:line 80
at Data_Organizer.MVVM.ViewModels.MainPageViewModel.PlayFeature() in C:\Users\bredu\Documents\ShortNotes\Data_Organizer\MVVM\ViewModels\MainPageViewModel.cs:line 67
at CommunityToolkit.Mvvm.Input.AsyncRelayCommand.AwaitAndThrowIfFailed(Task executionTask) in /_/src/CommunityToolkit.Mvvm/Input/AsyncRelayCommand.cs:line 351
at System.Threading.Tasks.Task.c.b__128_0(Object state)
at Android.App.SyncContext.c__DisplayClass2_0.
b__0() in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.App/SyncContext.cs:line 36
at Java.Lang.Thread.RunnableImplementor.Run() in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:line 37
at Java.Lang.IRunnableInvoker.n_Run(IntPtr jnienv, IntPtr native__this) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net8.0/android-34/mcw/Java.Lang.IRunnable.cs:line 84
at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PP_V(_JniMarshal_PP_V callback, IntPtr jnienv, IntPtr klazz) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:line 22
< /code>
At the same time, requests are normal with Postman, they come with a response. That is, in theory, the problem is not on the server side. Although I'm not sure, I'm also a newbie in the Web API topic...
If you have any questions, ask! I'll be glad and grateful if you help me solve this problem.