Need to read a Domo dataset using C#
I am having trouble getting an access token to work in C#. I am writing an application, and I need to update an office list using the data in one of my Domo datasets.
I have created client and secret IDs and post to "https://api.domo.com/oauth/token". I have tried several grant types and included/excluded a scope. The response is always unauthorized.
StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1,…
var tokenUrl = "https://api.domo.com/oauth/token";
var values = new Dictionary<string, string>
{
{ "grant_type", "client_credentials" },
{ "scope", "data" },
{ "client_id", clientId },
{ "client_secret", clientSecret }
};
var content = new FormUrlEncodedContent(values);
HttpResponseMessage response = client.PostAsync(tokenUrl, content).Result;
if (!response.IsSuccessStatusCode)
{
throw new Exception($"Failed to get access token: {response.ReasonPhrase}");
}
I just need to read a single dataset in Domo, using C#. Or VB.net…I'll convert code if needed. I haven't had trouble using Python. But that doesn't translate to C#.
** Was this post helpful? Click Agree or Like below. **
** Did this solve your problem? Accept it as a solution! **
Best Answer
-
It looks like you're not passing in an Authorization Header.
Here's some sample code I've used in the past which may be helpful:
using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; class Program { private static readonly string ClientId = "YOUR_CLIENT_ID"; private static readonly string ClientSecret = "YOUR_CLIENT_SECRET"; private static readonly string DomoAuthUrl = "https://api.domo.com/oauth/token"; static async Task Main(string[] args) { string token = await GetDomoOAuthToken(); Console.WriteLine($"OAuth Token: {token}"); } private static async Task<string> GetDomoOAuthToken() { using (HttpClient client = new HttpClient()) { // Construct the authorization header string authHeader = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{ClientId}:{ClientSecret}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeader); // Prepare the request content HttpContent content = new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded"); // Make the POST request HttpResponseMessage response = await client.PostAsync(DomoAuthUrl, content); // Ensure the request was successful response.EnsureSuccessStatusCode(); // Parse and return the token from the response string responseContent = await response.Content.ReadAsStringAsync(); dynamic jsonResponse = Newtonsoft.Json.JsonConvert.DeserializeObject(responseContent); return jsonResponse.access_token; } } }
**Was this post helpful? Click Agree or Like below**
**Did this solve your problem? Accept it as a solution!**0
Answers
-
It looks like you're not passing in an Authorization Header.
Here's some sample code I've used in the past which may be helpful:
using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; class Program { private static readonly string ClientId = "YOUR_CLIENT_ID"; private static readonly string ClientSecret = "YOUR_CLIENT_SECRET"; private static readonly string DomoAuthUrl = "https://api.domo.com/oauth/token"; static async Task Main(string[] args) { string token = await GetDomoOAuthToken(); Console.WriteLine($"OAuth Token: {token}"); } private static async Task<string> GetDomoOAuthToken() { using (HttpClient client = new HttpClient()) { // Construct the authorization header string authHeader = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{ClientId}:{ClientSecret}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeader); // Prepare the request content HttpContent content = new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded"); // Make the POST request HttpResponseMessage response = await client.PostAsync(DomoAuthUrl, content); // Ensure the request was successful response.EnsureSuccessStatusCode(); // Parse and return the token from the response string responseContent = await response.Content.ReadAsStringAsync(); dynamic jsonResponse = Newtonsoft.Json.JsonConvert.DeserializeObject(responseContent); return jsonResponse.access_token; } } }
**Was this post helpful? Click Agree or Like below**
**Did this solve your problem? Accept it as a solution!**0 -
That works. Thank you @GrantSmith .
** Was this post helpful? Click Agree or Like below. **
** Did this solve your problem? Accept it as a solution! **0
Categories
- All Categories
- 1.8K Product Ideas
- 1.8K Ideas Exchange
- 1.6K Connect
- 1.2K Connectors
- 300 Workbench
- 6 Cloud Amplifier
- 9 Federated
- 2.9K Transform
- 102 SQL DataFlows
- 626 Datasets
- 2.2K Magic ETL
- 3.9K Visualize
- 2.5K Charting
- 753 Beast Mode
- 61 App Studio
- 41 Variables
- 692 Automate
- 177 Apps
- 456 APIs & Domo Developer
- 49 Workflows
- 10 DomoAI
- 38 Predict
- 16 Jupyter Workspaces
- 22 R & Python Tiles
- 398 Distribute
- 115 Domo Everywhere
- 276 Scheduled Reports
- 7 Software Integrations
- 130 Manage
- 127 Governance & Security
- 8 Domo Community Gallery
- 38 Product Releases
- 11 Domo University
- 5.4K Community Forums
- 40 Getting Started
- 30 Community Member Introductions
- 110 Community Announcements
- 4.8K Archive