How do I set a default User Agent on an HttpClient?

C#asp.net

C# Problem Overview


It's easy to set a user agent on an HttpRequest, but often I want to use a single HttpClient and use the same user agent every time, rather than having to set it on each request.

C# Solutions


Solution 1 - C#

You can solve this easily using:

HttpClient _client = new HttpClient();
_client.DefaultRequestHeaders.Add("User-Agent", "C# App");

Solution 2 - C#

Using DefaultRequestHeaders.Add(...) did not work for me.

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (compatible; AcmeInc/1.0)");

Solution 3 - C#

The following worked for me in a .NET Standard 2.0 library:

HttpClient client = new HttpClient();
ProductHeaderValue header = new ProductHeaderValue("MyAwesomeLibrary", Assembly.GetExecutingAssembly().GetName().Version.ToString());
ProductInfoHeaderValue userAgent = new ProductInfoHeaderValue(header);
client.DefaultRequestHeaders.UserAgent.Add(userAgent);
// User-Agent: MyAwesomeLibrary/1.0.0.0

Solution 4 - C#

Using JensG comment >Short addition: The UserAgent class also offers TryParse, which comes especially handy when there is no version number (for whatever reason). The RFC explicitly allows this case.

on this answer

using System.Net.Http;
using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders
      .UserAgent
      .TryParseAdd("Mike D's Agent");
    //User-Agent: Mike D's Agent
}

Solution 5 - C#

string agent="ClientDemo/1.0.0.1 test user agent DefaultRequestHeaders";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("User-Agent", agent);

remark: use this structure to generate the agent name User-Agent: product / product-version comment

> - product: Product identifier > - product-version: Product version number. > - comment: None or more of the infomation Comments containing product, for example.

references

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTom WarnerView Question on Stackoverflow
Solution 1 - C#Tom WarnerView Answer on Stackoverflow
Solution 2 - C#Martin MeixgerView Answer on Stackoverflow
Solution 3 - C#Jan BońkowskiView Answer on Stackoverflow
Solution 4 - C#spottedmahnView Answer on Stackoverflow
Solution 5 - C#Felipe Silva AlvarezView Answer on Stackoverflow