OPS.GoCloud.AzureClient
1.1.9
dotnet add package OPS.GoCloud.AzureClient --version 1.1.9
NuGet\Install-Package OPS.GoCloud.AzureClient -Version 1.1.9
<PackageReference Include="OPS.GoCloud.AzureClient" Version="1.1.9" />
<PackageVersion Include="OPS.GoCloud.AzureClient" Version="1.1.9" />
<PackageReference Include="OPS.GoCloud.AzureClient" />
paket add OPS.GoCloud.AzureClient --version 1.1.9
#r "nuget: OPS.GoCloud.AzureClient, 1.1.9"
#:package OPS.GoCloud.AzureClient@1.1.9
#addin nuget:?package=OPS.GoCloud.AzureClient&version=1.1.9
#tool nuget:?package=OPS.GoCloud.AzureClient&version=1.1.9
Installation
dotnet add package OPS.GoCloud.AzureClient
Requirements
- .NET 8.0 or later
Dependencies
- Azure.Identity 1.20.0
- Azure.Monitor.Query 1.7.1
- Azure.ResourceManager.ResourceGraph 1.1.0
- Azure.Security.KeyVault.Secrets 4.9.0
- Dapper 2.1.72
- Microsoft.Data.SqlClient 7.0.0
- Microsoft.Graph 5.103.0
- Newtonsoft.Json 13.0.4
Use
Initialize AzureClient
Default credentials
var tenantId = "YOUR_TENANT_ID";
AzureClient azureClient = new AzureClient(tenantId);
Client credentials
var tenantId = "YOUR_TENANT_ID";
var clientId = "YOUR_CLIENT_ID";
var clientsecret = "YOUR_CLIENT_SECRET";
AzureClient azureClient = new AzureClient(tenantId,clientId,clientsecret);
User-managed identity credentials
var tenantId = "YOUR_TENANT_ID";
var umiClientId = "User-Managed Identity_CLIENT_ID";
AzureClient azureClient = new AzureClient(tenantId,umiClientId);
Interactive browser credentials
var tenantId = "YOUR_TENANT_ID";
// Use PowerShell or CLI client ID for interactive login
AzureClient azureClient = new AzureClient(tenantId, InteractiveDevice.PowerShell);
// or
AzureClient azureClient = new AzureClient(tenantId, InteractiveDevice.CLI);
Custom token and credential
var tenantId = "YOUR_TENANT_ID";
var accessToken = "YOUR_ACCESS_TOKEN";
TokenCredential credential = /* your credential */;
AzureClient azureClient = new AzureClient(tenantId, accessToken, credential);
List Azure subscriptions
List all the enabled Azure subscriptions in your tenant
var subs = azureClient.ListSubscriptions();
List all the Azure subscriptions in your tenant
var subs = azureClient.ListSubscriptions(enabledOnly: false);
Query from Azure Resource Graph
- Create your custom class and inherit from ArmBase.
public class subscription : ArmBase<subscription>
{
public string subscriptionId { get; set; }
public string name { get; set; }
}
- Write query and get results. The results will be deserialized to your custom class type.
string query = "resourcecontainers | where type == 'microsoft.resources/subscriptions | project subscriptionId,name";
List<subscription> azureSubs = subscription.Query(azureClient, query);
Send request to Azure REST API
- Create your custom class
public class PolicyAssignment
{
public string id { get; set; }
public string name { get; set; }
public string location { get; set; }
public object properties { get; set; }
}
- Send request to Azure REST API by calling SendToAzRestAPI. Successful response returns data in JSON string, and can be deserialized to your custom class type.
string policyAssignmentId = "";
string uri = $"https://management.azure.com/{policyAssignmentId}?api-version=2021-06-01";
// The returned respose content is data in JSON string
var resultsJson = await azureClient.SendToAzRestAPI(uri,HttpMethod.Get);
PolicyAssignment policyAssignment = JsonConvert.DeserializeObject<PolicyAssignment>(resultsJson);
Initialize Microsoft Graph Client
var graphClientId = "YOUR_CLIENT_ID";
var graphClientsecret = "YOUR_CLIENT_SECRET";
azureClient.InitiateGraphClient(graphClientId,graphClientsecret);
List MS Graph objects
To get a full list of MS Graph objects and optinally parse into your custom class type, we can call the method ListFromMsGraph.
- Define a container class type. For example,
public class MyUsersContainer
{
[JsonProperty("@odata.nextLink")]
public string OdataNextLink { get; set; }
public List<Microsoft.Graph.Models.User> value { get; set; }
}
// Or use your custom class to parse the User object
public class MyUser
{
public string id { get; set; }
public string displayName { get; set; }
}
public class MyUsersContainer
{
[JsonProperty("@odata.nextLink")]
public string OdataNextLink { get; set; }
public List<MyUser> value { get; set; }
}
A container class type is needed for the method ListFromMsGraph to parse the results. All MS Graph LIST APIs return data as in
{
"@odata.nextLink":"https://...",
"value":[
{
...
},
{
...
}
]
}
Notice it is a JSON object with a "@odata.nextLink" field and a "value" field.
- The "@odata.nextLink" field is an URL. When more than one query request is required to retrieve all the results, Microsoft Graph returns an "@odata.nextLink" property in the response that contains a URL to the next page of results.
- The "value" field is an array, containg the results in the current page.
- Call ListFromMsGraph
var graphClientId = "YOUR_CLIENT_ID";
var graphClientsecret = "YOUR_CLIENT_SECRET";
azureClient.InitiateGraphClient(graphClientId,graphClientsecret);
string uri = "https://graph.microsoft.com/beta/users"; //optionally add MS Graph API-supported query parameters, such as $filter, $top
List<MyUser> users = await azClient.ListFromMsGraph<MyUser, MyUsersContainer>(uri);
Send request to MS Graph API
Another method to get results from MS Graph API is SendToMsGraphAPI
- Optionally create your custom class
public class MyUser
{
public string id { get; set; }
public string displayName { get; set; }
}
- Send request to MS Graph API by calling SendToMsGraphAPI. Successful response returns data in JSON string, and can be deserialized to a class type.
string userId = "";
string uri = $"https://graph.microsoft.com/beta/users/{userId}";
// The returned respose content is data in JSON string
var resultsJson = await azureClient.SendToMsGraphAPI(uri,HttpMethod.Get);
MyUser user = JsonConvert.DeserializeObject<MyUser>(resultsJson);
Use Utils methods
using static GoCloud.AzureClient.Utils;
// EmptyString
string str1 = "";
string str2 = "myTeStStr";
str1.EmptyString(); // => returns True
str2.EmptyString(); // => returns False
// StringContains
string searchStr1 = "est";
string searchStr2 = "ddd";
str2.StringContains(searchStr1); // => returns True
str2.StringContains(searchStr2); // => returns False
// IgnoreSerializeJson and SelectSerializeJson
MyUser user = new MyUser { id="010", displayName = "user1" };
string jsonStr1 = IgnoreSerializeJson(user, ignoreProp:"displayName"); // => returns a JSON string { "id": "010" }
string jsonStr2 = SelectSerializeJson(user, selectProp:"displayName"); // => returns a JSON string { "displayName": "user1" }
For more Utils methods, please see the code repo.
Query Azure Monitor Logs (Log Analytics)
var workspaceId = "YOUR_WORKSPACE_ID";
var query = "AzureActivity | summarize count() by Category";
var timeSpan = TimeSpan.FromDays(1);
// Returns rows as string arrays
var rows = await azureClient.QueryWorkspaceLogs(workspaceId, query, timeSpan);
// Or get the full LogsTable
var table = await azureClient.QueryWorkspaceTable(workspaceId, query, timeSpan);
Query Application Insights
// Set the App Insights token first
azureClient.SetAppInsightToken();
var appId = "YOUR_APP_INSIGHTS_APP_ID";
var query = "requests | summarize count() by resultCode";
var result = await azureClient.QueryAppInsights(appId, query);
Azure Key Vault
var kvName = "YOUR_KEYVAULT_NAME";
var secretClient = azureClient.GetSecretClient(kvName);
// Get a secret
var secret = secretClient.GetSecret("my-secret");
SQL Operations (SQLBase)
Inherit from SQLBase<T> to get built-in SQL bulk operations.
public class MyRecord : SQLBase<MyRecord>
{
public string Name { get; set; }
public int Value { get; set; }
}
// Bulk save
using var con = new SqlConnection(connectionString);
con.Open();
MyRecord.Save(con, records, "dbo.MyTable");
// List all
var items = MyRecord.List(con, "dbo.MyTable");
// Clean up
MyRecord.CleanUp(con, "dbo.MyTable");
MyRecord.CleanUpToday(con, "dbo.MyTable", "DateColumn");
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Azure.Identity (>= 1.20.0)
- Azure.Monitor.Query (>= 1.7.1)
- Azure.ResourceManager.ResourceGraph (>= 1.1.0)
- Azure.Security.KeyVault.Secrets (>= 4.9.0)
- Dapper (>= 2.1.72)
- Microsoft.Data.SqlClient (>= 7.0.0)
- Microsoft.Graph (>= 5.103.0)
- Newtonsoft.Json (>= 13.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated | |
|---|---|---|---|
| 1.1.9 | 98 | 4/1/2026 | |
| 1.1.8 | 90 | 4/1/2026 | |
| 1.1.7 | 202 | 10/20/2025 | |
| 1.1.6 | 1,137 | 8/22/2024 | |
| 1.1.5 | 193 | 8/21/2024 | |
| 1.1.4 | 201 | 8/21/2024 | |
| 1.1.3 | 202 | 8/21/2024 | |
| 1.1.2 | 205 | 8/21/2024 | |
| 1.1.1 | 209 | 6/17/2024 | |
| 1.1.0 | 207 | 5/7/2024 | |
| 1.0.9 | 250 | 3/20/2024 | |
| 1.0.8 | 201 | 2/16/2024 | |
| 1.0.7 | 224 | 2/6/2024 | |
| 1.0.6 | 210 | 1/25/2024 | |
| 1.0.5 | 187 | 1/24/2024 | |
| 1.0.4 | 183 | 1/22/2024 | |
| 1.0.3 | 194 | 1/22/2024 | |
| 1.0.2 | 197 | 1/22/2024 | |
| 1.0.1 | 191 | 1/22/2024 | |
| 1.0.0 | 204 | 1/22/2024 |