Hi,
ich hab augrund von @shad Anregung mich nochmal mit dem Thema IHttpClientFactory in VS ASp.Net beschäftigt.
Als Beispiel hab ich hier eine Api Abfrage an api.sunrise-sunset.org realisiert (mit Asp,net Blazor Server-Side).
Zum Nachbauen:
-Blazer ServerSide Projekt in VS erstellen
-NugetPacket Newtonsoft.Json hinzufügen (rechte Maus auf Projektnamen im SolutionExplorer -> Mangage Nugetpackages ->Search ->add)
-In der Startup.cs einfügen:
-Neuen Ordner Models adden
-In _imports.razor hinzufügen:
-Den Inahlt von index.razor mit diesem ersetzen:
-Neue Klasse in Ordner Models erstellen SunSetApiModel.cs Inahlt:
Wie kommt zu diesen C# Klassen -> Online Converter
1. Link in Browser eingeben: api.sunrise-sunset.org/json?la…lng=-4.4203400&date=today
2. den Text komplett kopieren und in json2csharp.com eingeben (Add JsonProperty Yes und use PascalCase Yes)
3. nun hat man die Api Antwort als C# Class Model
Das müsste es ungefähr sein. Viel Spaß mit dem Beispiel an den der sich die Zeit nimmt das auszuprobieren!
@shad aus diesem Thread: Kann ein Asp.Net Server Projekt automatisch ohne das ein Benutzer die Webseite besucht in regelmäßigem Abstand einen ApiCall ausführen und die Daten in einem File speichern?
Meine Frage ist:
Ist das mit dem HttpClient jetzt so wie man es machen soll oder hab ich immer noch Probleme mit zu vielen Sockets offen etc. (was auch immer das heißen mag :))
ich hab augrund von @shad Anregung mich nochmal mit dem Thema IHttpClientFactory in VS ASp.Net beschäftigt.
Als Beispiel hab ich hier eine Api Abfrage an api.sunrise-sunset.org realisiert (mit Asp,net Blazor Server-Side).
Zum Nachbauen:
-Blazer ServerSide Projekt in VS erstellen
-NugetPacket Newtonsoft.Json hinzufügen (rechte Maus auf Projektnamen im SolutionExplorer -> Mangage Nugetpackages ->Search ->add)
-In der Startup.cs einfügen:
-Neuen Ordner Models adden
-In _imports.razor hinzufügen:
-Den Inahlt von index.razor mit diesem ersetzen:
C#-Quellcode
- @page "/"
- @inject IHttpClientFactory httpClientFactory;
- @if (myJsonResponseAsString != null)
- {
- <div>
- ResponseMsg Status:@httpResponseMessage.StatusCode
- <br />
- <br />
- Response Content: @httpResponseMessage.Content.ToString()
- <br />
- <br />
- Response Headers:@httpResponseMessage.Headers
- <br />
- <br />
- ApiResponse als String:@myJsonResponseAsString
- <br />
- <br />
- Status sunSetApiResponse: @sunSeResponseObj.Status
- <br />
- <br />
- Sonnenuntergang um: @sunSeResponseObj.Results.Sunset
- </div>
- }
- @code{
- HttpRequestMessage httpRequestMessage = new HttpRequestMessage();
- HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
- string myJsonResponseAsString;
- SunSetApiModel sunSeResponseObj = new SunSetApiModel();
- protected override async Task OnInitializedAsync()
- {
- httpRequestMessage.Method = new HttpMethod("GET");
- httpRequestMessage.RequestUri = new Uri(@"https://api.sunrise-sunset.org/json?lat=36.7201600&lng=-4.4203400&date=today");
- httpRequestMessage.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
- var client = httpClientFactory.CreateClient();
- httpResponseMessage = await client.SendAsync(httpRequestMessage);
- myJsonResponseAsString = await httpResponseMessage.Content.ReadAsStringAsync();
- sunSeResponseObj = JsonConvert.DeserializeObject<SunSetApiModel>(myJsonResponseAsString);
- }
- }
-Neue Klasse in Ordner Models erstellen SunSetApiModel.cs Inahlt:
C#-Quellcode
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- namespace DEINPROJEKTNAME.Models
- {
- // SunSetApiModel sunSeResponseObj = JsonConvert.DeserializeObject<SunSetApiModel>(myJsonResponse);
- public class Results
- {
- [JsonProperty("sunrise")]
- public string Sunrise { get; set; }
- [JsonProperty("sunset")]
- public string Sunset { get; set; }
- [JsonProperty("solar_noon")]
- public string SolarNoon { get; set; }
- [JsonProperty("day_length")]
- public string DayLength { get; set; }
- [JsonProperty("civil_twilight_begin")]
- public string CivilTwilightBegin { get; set; }
- [JsonProperty("civil_twilight_end")]
- public string CivilTwilightEnd { get; set; }
- [JsonProperty("nautical_twilight_begin")]
- public string NauticalTwilightBegin { get; set; }
- [JsonProperty("nautical_twilight_end")]
- public string NauticalTwilightEnd { get; set; }
- [JsonProperty("astronomical_twilight_begin")]
- public string AstronomicalTwilightBegin { get; set; }
- [JsonProperty("astronomical_twilight_end")]
- public string AstronomicalTwilightEnd { get; set; }
- }
- public class SunSetApiModel
- {
- [JsonProperty("results")]
- public Results Results { get; set; }
- [JsonProperty("status")]
- public string Status { get; set; }
- }
- }
Wie kommt zu diesen C# Klassen -> Online Converter
1. Link in Browser eingeben: api.sunrise-sunset.org/json?la…lng=-4.4203400&date=today
2. den Text komplett kopieren und in json2csharp.com eingeben (Add JsonProperty Yes und use PascalCase Yes)
3. nun hat man die Api Antwort als C# Class Model
Das müsste es ungefähr sein. Viel Spaß mit dem Beispiel an den der sich die Zeit nimmt das auszuprobieren!
@shad aus diesem Thread: Kann ein Asp.Net Server Projekt automatisch ohne das ein Benutzer die Webseite besucht in regelmäßigem Abstand einen ApiCall ausführen und die Daten in einem File speichern?
Der HttpClient sollte in ASP.NET Core am Besten anders verwendet werden. Microsoft hat hierzu auch einen Artikel:docs.microsoft.com/en-us/aspne…uests?view=aspnetcore-3.1
Meine Frage ist:
Ist das mit dem HttpClient jetzt so wie man es machen soll oder hab ich immer noch Probleme mit zu vielen Sockets offen etc. (was auch immer das heißen mag :))
codewars.com Rank: 4 kyu