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.7K Product Ideas
- 1.7K Ideas Exchange
- 1.5K Connect
- 1.2K Connectors
- 292 Workbench
- 4 Cloud Amplifier
- 8 Federated
- 2.8K Transform
- 95 SQL DataFlows
- 602 Datasets
- 2.1K Magic ETL
- 3.7K Visualize
- 2.4K Charting
- 695 Beast Mode
- 43 App Studio
- 39 Variables
- 658 Automate
- 170 Apps
- 441 APIs & Domo Developer
- 42 Workflows
- 5 DomoAI
- 32 Predict
- 12 Jupyter Workspaces
- 20 R & Python Tiles
- 386 Distribute
- 111 Domo Everywhere
- 269 Scheduled Reports
- 6 Software Integrations
- 113 Manage
- 110 Governance & Security
- 8 Domo University
- 30 Product Releases
- Community Forums
- 39 Getting Started
- 29 Community Member Introductions
- 98 Community Announcements
- Domo Community Gallery
- 4.8K Archive