Comments (6)
In case anyone is wondering now how to make it work in blazor, here's how I do it. In Program.cs
register scoped MusicBrainzService:
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
...
builder.Services.AddScoped(x => new MusicBrainzClient(CreateMusicBrainzHttpClient()));
...
await builder.Build().RunAsync();
}
private static HttpClient CreateMusicBrainzHttpClient()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://musicbrainz.org/ws/2/");
client.DefaultRequestHeaders.UserAgent.Add(new System.Net.Http.Headers.ProductInfoHeaderValue("Hqub.MusicBrainz", "3.0-beta"));
client.DefaultRequestHeaders.UserAgent.Add(new System.Net.Http.Headers.ProductInfoHeaderValue("+(https://github.com/avatar29A/MusicBrainz)"));
return client;
}
and then in your actual .razor
file you need to inject it before it can be used:
@inject MusicBrainzClient musicBrainzClient
...
@code {
private async Task GetRelease(string id)
{
release = await musicBrainzClient.Releases.GetAsync(id);
...
}
}
from musicbrainz.
I can see two solutions: either allow the user to provide their own HttpClient implementation
public MusicBrainzClient(string baseAddress, IWebProxy proxy, HttpClient httpClient)
{
var urlBuilder = new UrlBuilder(true);
Artists = new ArtistService(this, urlBuilder);
Recordings = new RecordingService(this, urlBuilder);
Releases = new ReleaseService(this, urlBuilder);
ReleaseGroups = new ReleaseGroupService(this, urlBuilder);
Work = new WorkService(this, urlBuilder);
client = httpClient ?? CreateHttpClient(new Uri(baseAddress), true, proxy);
client.BaseAddress = new Uri(baseAddress);
}
or don't use HttpClientHandler
private HttpClient CreateHttpClient(Uri baseAddress)
{
return new HttpClient() {
DefaultRequestHeaders.Add("User-Agent", UserAgent);
BaseAddress = baseAddress;
};
}
By the way, what is the purpose of HttpClientHandler
here? Is it just to be able to use proxy?
from musicbrainz.
By the way, what is the purpose of
HttpClientHandler
here? Is it just to be able to use proxy?
Well, using HttpClient
I thought HttpClientHandler
was the way to setup some advanced aspects like proxies.
I guess there are two options now:
- Add a special factory method, something like
public static MusicBrainzClient CreateWasmClient(...);
- Use
HttpWebRequest
instead ofHttpClient
and set up proxy and compression headers there.
I haven't used Blazor yet, so please test whatever solution you prefer. A pull request would be welcome.
from musicbrainz.
Additional note:
At first I discarded your proposal of adding a separate constructor
public MusicBrainzClient(string baseAddress, IWebProxy proxy, HttpClient httpClient)
since I like to keep the number of separate constructors (with multiple arguments) as low as possible, but in this case, only one additional constructor would be necessary:
public MusicBrainzClient(HttpClient httpClient)
Additionally, the proxy setup could be propagated through a public property (forwarded to HttpClient.DefaultProxy).
from musicbrainz.
@wo80 Sorry I wasn't able to find time to look into it yet. At a glance, these are all good suggestions. I will take a closer look, hopefully, tomorrow.
from musicbrainz.
Add a special factory method, something like
public static MusicBrainzClient CreateWasmClient(...);
I feel like the API module doesn't need to know what kind of parent consumes it and provide specific implementations.
Use HttpWebRequest instead of HttpClient and set up proxy and compression headers there
It looks like HttpWebRequest doesn't support async/await OOTB, so not the best option IMO.
only one additional constructor would be necessary
I think you've found a best way to do it. I just tested the code, and it solves the problem. This way the client can provide their own HttpClient, with Proxy or without - is up to them.
Thank you so much.
from musicbrainz.
Related Issues (20)
- Parameters with query HOT 6
- Is there a way to get Album tracks by Album mbid HOT 4
- Portable vs .NET Standard HOT 6
- Get artist albums by mbid HOT 7
- Getting artists by tag HOT 13
- Should GenerateCommunicationThrow be removed? HOT 19
- Error with Release.GetAsync on a specific album mbid HOT 4
- [Question] Is there a way to hold local metadata in sync? HOT 2
- A move to .NetStandard? HOT 9
- Get by type of albums with ReleaseGroup.BrowseAsync HOT 4
- Get releases by release group id HOT 2
- Support for MusicBrainz mirror servers HOT 6
- 2 calls hang HOT 2
- ReleaseList is expecting `count` and `offset` but is provided `release-count` and `release-offset` HOT 6
- Travis CI HOT 2
- Add genre entity please?
- How to get track artist please? HOT 2
- Increasing the accuracy of the searches HOT 3
- QueryParameters() is returning a badly formatted string HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from musicbrainz.