diff --git a/DirectConnector/AzureBlobFunctions.cs b/DirectConnector/AzureBlobFunctions.cs
index 4dc8c38..2d711f3 100644
--- a/DirectConnector/AzureBlobFunctions.cs
+++ b/DirectConnector/AzureBlobFunctions.cs
@@ -3,8 +3,8 @@
//------------------------------------------------------------
using System.Net;
-using Microsoft.Azure.Connectors.DirectClient.Azureblob;
-using Microsoft.Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk.Azureblob;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
@@ -71,17 +71,17 @@ await response
.ConfigureAwait(continueOnCapturedContext: false);
return response;
}
- catch (AzureblobConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody })
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody })
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetBlobMetadata.");
@@ -140,17 +140,17 @@ await response.Body
return response;
}
- catch (AzureblobConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody })
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody })
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in DownloadBlob.");
@@ -210,17 +210,17 @@ await response
.ConfigureAwait(continueOnCapturedContext: false);
return response;
}
- catch (AzureblobConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody })
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody })
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in UploadBlob.");
@@ -271,17 +271,17 @@ await response
.ConfigureAwait(continueOnCapturedContext: false);
return response;
}
- catch (AzureblobConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Azure Blob connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody })
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody })
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in DeleteBlob.");
diff --git a/DirectConnector/AzureLogAnalyticsFunctions.cs b/DirectConnector/AzureLogAnalyticsFunctions.cs
deleted file mode 100644
index 04f3492..0000000
--- a/DirectConnector/AzureLogAnalyticsFunctions.cs
+++ /dev/null
@@ -1,158 +0,0 @@
-//------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//------------------------------------------------------------
-
-using System.Net;
-using Microsoft.Azure.Connectors.DirectClient.Azureloganalytics;
-using Microsoft.Azure.Connectors.Sdk;
-using Microsoft.Azure.Functions.Worker;
-using Microsoft.Azure.Functions.Worker.Http;
-using Microsoft.Extensions.Logging;
-
-namespace DirectConnector;
-
-///
-/// Azure Functions demonstrating Azure Log Analytics operations using the generated
-/// from the DirectClient SDK.
-///
-public class AzureLogAnalyticsFunctions
-{
- private readonly ILogger _logger;
- private readonly AzureloganalyticsClient _logAnalyticsClient;
-
- public AzureLogAnalyticsFunctions(
- ILogger logger,
- AzureloganalyticsClient logAnalyticsClient)
- {
- this._logger = logger;
- this._logAnalyticsClient = logAnalyticsClient;
- }
-
- ///
- /// Lists Azure subscriptions available to the authenticated connection.
- /// Demonstrates paginated enumeration via await foreach over ConnectorPageable.
- ///
- [Function("ListLogAnalyticsSubscriptions")]
- public async Task ListSubscriptionsAsync(
- [HttpTrigger(AuthorizationLevel.Function, "get", Route = "loganalytics/subscriptions")] HttpRequestData request,
- CancellationToken cancellationToken)
- {
- this._logger.LogInformation("ListLogAnalyticsSubscriptions: Using generated AzureloganalyticsClient from SDK.");
-
- try
- {
- var subscriptions = new List();
- await foreach (var subscription in this._logAnalyticsClient
- .ListSubscriptionsAsync()
- .WithCancellation(cancellationToken)
- .ConfigureAwait(continueOnCapturedContext: false))
- {
- subscriptions.Add(subscription);
- }
-
- var response = request.CreateResponse(HttpStatusCode.OK);
- await response
- .WriteAsJsonAsync(new { success = true, count = subscriptions.Count, subscriptions }, cancellationToken)
- .ConfigureAwait(continueOnCapturedContext: false);
-
- return response;
- }
- catch (AzureloganalyticsConnectorException ex)
- {
- this._logger.LogError(ex, "ListLogAnalyticsSubscriptions failed with status '{StatusCode}'.", ex.StatusCode);
-
- var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
- await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
- .ConfigureAwait(continueOnCapturedContext: false);
-
- return errorResponse;
- }
- catch (Exception ex) when (!ex.IsFatal())
- {
- this._logger.LogError(ex, "Error in ListLogAnalyticsSubscriptions.");
-
- var errorResponse = request.CreateResponse(HttpStatusCode.InternalServerError);
- await errorResponse
- .WriteAsJsonAsync(new
- {
- success = false,
- error = ex.Message
- })
- .ConfigureAwait(continueOnCapturedContext: false);
-
- return errorResponse;
- }
- }
-
- ///
- /// Lists Log Analytics workspaces in a subscription and resource group.
- /// Demonstrates paginated enumeration with query parameters passed to the connector.
- ///
- [Function("ListLogAnalyticsWorkspaces")]
- public async Task ListWorkspacesAsync(
- [HttpTrigger(AuthorizationLevel.Function, "get", Route = "loganalytics/workspaces")] HttpRequestData request,
- CancellationToken cancellationToken)
- {
- this._logger.LogInformation("ListLogAnalyticsWorkspaces: Using generated AzureloganalyticsClient from SDK.");
-
- var subscription = request.Query["subscription"];
- var resourceGroup = request.Query["resourceGroup"];
-
- if (string.IsNullOrWhiteSpace(subscription) || string.IsNullOrWhiteSpace(resourceGroup))
- {
- var badRequest = request.CreateResponse(HttpStatusCode.BadRequest);
- await badRequest
- .WriteAsJsonAsync(new { success = false, error = "Query parameters 'subscription' and 'resourceGroup' are required." }, cancellationToken)
- .ConfigureAwait(continueOnCapturedContext: false);
-
- return badRequest;
- }
-
- try
- {
- // Note: SDK returns ResourceGroup type for workspace entries per the connector API schema
- var workspaces = new List();
- await foreach (var workspace in this._logAnalyticsClient
- .ListWorkspaceNamesAsync(subscription: subscription, resourceGroup: resourceGroup)
- .WithCancellation(cancellationToken)
- .ConfigureAwait(continueOnCapturedContext: false))
- {
- workspaces.Add(workspace);
- }
-
- var response = request.CreateResponse(HttpStatusCode.OK);
- await response
- .WriteAsJsonAsync(new { success = true, count = workspaces.Count, workspaces }, cancellationToken)
- .ConfigureAwait(continueOnCapturedContext: false);
-
- return response;
- }
- catch (AzureloganalyticsConnectorException ex)
- {
- this._logger.LogError(ex, "ListLogAnalyticsWorkspaces failed with status '{StatusCode}'.", ex.StatusCode);
-
- var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
- await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
- .ConfigureAwait(continueOnCapturedContext: false);
-
- return errorResponse;
- }
- catch (Exception ex) when (!ex.IsFatal())
- {
- this._logger.LogError(ex, "Error in ListLogAnalyticsWorkspaces.");
-
- var errorResponse = request.CreateResponse(HttpStatusCode.InternalServerError);
- await errorResponse
- .WriteAsJsonAsync(new
- {
- success = false,
- error = ex.Message
- })
- .ConfigureAwait(continueOnCapturedContext: false);
-
- return errorResponse;
- }
- }
-}
diff --git a/DirectConnector/Configuration/ConnectorOptions.cs b/DirectConnector/Configuration/ConnectorOptions.cs
deleted file mode 100644
index 4e57886..0000000
--- a/DirectConnector/Configuration/ConnectorOptions.cs
+++ /dev/null
@@ -1,269 +0,0 @@
-//------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-//------------------------------------------------------------
-
-using System.ComponentModel.DataAnnotations;
-using Microsoft.Extensions.Options;
-
-namespace DirectConnector.Configuration;
-
-///
-/// Configuration options for all managed connectors.
-///
-public class ConnectorOptions
-{
- ///
- /// Configuration section name in appsettings/local.settings.
- ///
- public const string SectionName = "Connectors";
-
- ///
- /// Office365 connector options.
- ///
- [ValidateObjectMembers]
- public Office365Options Office365 { get; set; } = new Office365Options();
-
- ///
- /// SharePoint Online connector options.
- ///
- [ValidateObjectMembers]
- public SharePointOptions SharePoint { get; set; } = new SharePointOptions();
-
- ///
- /// Microsoft Teams connector options.
- ///
- [ValidateObjectMembers]
- public TeamsOptions Teams { get; set; } = new TeamsOptions();
-
- ///
- /// OneDrive for Business connector options.
- ///
- [ValidateObjectMembers]
- public OneDriveOptions OneDrive { get; set; } = new OneDriveOptions();
-
- ///
- /// MS Graph Groups and Users connector options.
- ///
- [ValidateObjectMembers]
- public MsGraphOptions MsGraph { get; set; } = new MsGraphOptions();
-
- ///
- /// Azure Blob Storage connector options.
- ///
- [ValidateObjectMembers]
- public AzureBlobOptions AzureBlob { get; set; } = new AzureBlobOptions();
-
- ///
- /// SMTP connector options.
- ///
- [ValidateObjectMembers]
- public SmtpOptions Smtp { get; set; } = new SmtpOptions();
-
- ///
- /// IBM MQ connector options.
- ///
- [ValidateObjectMembers]
- public MqOptions Mq { get; set; } = new MqOptions();
-
- ///
- /// Office 365 Users connector options.
- ///
- [ValidateObjectMembers]
- public Office365UsersOptions Office365Users { get; set; } = new Office365UsersOptions();
-
- ///
- /// Azure Log Analytics connector options.
- ///
- [ValidateObjectMembers]
- public AzureLogAnalyticsOptions AzureLogAnalytics { get; set; } = new AzureLogAnalyticsOptions();
-}
-
-///
-/// Configuration options for the Microsoft Teams connector.
-///
-public class TeamsOptions
-{
- ///
- /// The API connection runtime URL for Microsoft Teams.
- ///
- [Required(ErrorMessage = "Teams ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the Office365 connector.
-///
-public class Office365Options
-{
- ///
- /// The API connection runtime URL for Office365.
- ///
- [Required(ErrorMessage = "Office365 ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the SharePoint Online connector.
-///
-public class SharePointOptions
-{
- ///
- /// The API connection runtime URL for SharePoint Online.
- ///
- [Required(ErrorMessage = "SharePoint ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the OneDrive for Business connector.
-///
-public class OneDriveOptions
-{
- ///
- /// The API connection runtime URL for OneDrive for Business.
- ///
- [Required(ErrorMessage = "OneDrive ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the MS Graph Groups and Users connector.
-///
-public class MsGraphOptions
-{
- ///
- /// The API connection runtime URL for MS Graph Groups and Users.
- ///
- [Required(ErrorMessage = "Connectors:MsGraph:ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the Azure Blob Storage connector.
-///
-public class AzureBlobOptions
-{
- ///
- /// The API connection runtime URL for Azure Blob Storage.
- ///
- [Required(ErrorMessage = "Connectors:AzureBlob:ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the SMTP connector.
-///
-public class SmtpOptions
-{
- ///
- /// The API connection runtime URL for SMTP.
- ///
- [Required(ErrorMessage = "Connectors:Smtp:ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the IBM MQ connector.
-///
-public class MqOptions
-{
- ///
- /// The API connection runtime URL for IBM MQ.
- ///
- [Required(ErrorMessage = "Connectors:Mq:ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the Office 365 Users connector.
-///
-public class Office365UsersOptions
-{
- ///
- /// The API connection runtime URL for Office 365 Users.
- ///
- [Required(ErrorMessage = "Connectors:Office365Users:ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
-
-///
-/// Configuration options for the Azure Log Analytics connector.
-///
-public class AzureLogAnalyticsOptions
-{
- ///
- /// The API connection runtime URL for Azure Log Analytics.
- ///
- [Required(ErrorMessage = "Connectors:AzureLogAnalytics:ConnectionRuntimeUrl is required.")]
- public string ConnectionRuntimeUrl { get; set; } = string.Empty;
-
- ///
- /// Managed identity client ID for user-assigned identity.
- /// Set to empty string for system-assigned managed identity.
- /// Leave unset (null) to use the DefaultAzureCredential chain (CLI, env vars, etc.).
- ///
- public string? ManagedIdentityClientId { get; set; }
-}
diff --git a/DirectConnector/ConnectorFunctions.cs b/DirectConnector/ConnectorFunctions.cs
index 81b52a1..ef84e22 100644
--- a/DirectConnector/ConnectorFunctions.cs
+++ b/DirectConnector/ConnectorFunctions.cs
@@ -5,14 +5,14 @@
using System.Net;
using System.Text;
using System.Text.Json;
-using Microsoft.Azure.Connectors.DirectClient.Office365;
-using Microsoft.Azure.Connectors.DirectClient.Sharepointonline;
-using Microsoft.Azure.Connectors.DirectClient.Teams;
-using Microsoft.Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk.Office365;
+using Azure.Connectors.Sdk.Sharepointonline;
+using Azure.Connectors.Sdk.Teams;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
-using SharePointBlobMetadata = Microsoft.Azure.Connectors.DirectClient.Sharepointonline.BlobMetadata;
+using SharePointBlobMetadata = Azure.Connectors.Sdk.Sharepointonline.BlobMetadata;
namespace DirectConnector;
@@ -148,9 +148,9 @@ await response
return response;
}
- catch (Office365ConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -158,14 +158,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in SendEmail.");
@@ -212,9 +212,9 @@ await response
return response;
}
- catch (Office365ConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -222,13 +222,13 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode
+ statusCode = ex.Status
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetCategories.");
@@ -290,9 +290,9 @@ await response
return response;
}
- catch (SharepointonlineConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -300,14 +300,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetSharePointLists.");
@@ -386,9 +386,9 @@ await response
return response;
}
- catch (SharepointonlineConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -396,14 +396,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in ListFolder.");
@@ -471,9 +471,9 @@ await response.Body
return response;
}
- catch (SharepointonlineConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -481,14 +481,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in DownloadFile.");
@@ -593,9 +593,9 @@ await response
return response;
}
- catch (SharepointonlineConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "SharePoint connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -603,14 +603,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in UploadFile.");
@@ -670,9 +670,9 @@ await response.Body
return response;
}
- catch (Office365ConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -680,13 +680,13 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode
+ statusCode = ex.Status
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in ExportEmail.");
@@ -846,7 +846,7 @@ await errorResponse
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in TriggerCallback.");
@@ -928,9 +928,9 @@ await response
return response;
}
- catch (TeamsConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -938,14 +938,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetAllTeams.");
@@ -1005,9 +1005,9 @@ await response
return response;
}
- catch (TeamsConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -1015,14 +1015,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetTeamChannels.");
@@ -1098,9 +1098,9 @@ await response
return response;
}
- catch (TeamsConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -1108,14 +1108,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetChannelMessages.");
@@ -1178,7 +1178,7 @@ await badRequest
// The actual message body properties are determined at runtime by the connector's schema
// discovery endpoint. With [JsonExtensionData] on AdditionalProperties, arbitrary properties
// are now serialized correctly. Populate the dictionary with the expected message fields.
- var messageRequest = new Microsoft.Azure.Connectors.DirectClient.Teams.DynamicPostMessageRequest();
+ var messageRequest = new Azure.Connectors.Sdk.Teams.DynamicPostMessageRequest();
messageRequest.AdditionalProperties["recipient"] = JsonSerializer.SerializeToElement(
new
{
@@ -1210,9 +1210,9 @@ await response
return response;
}
- catch (TeamsConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Teams connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -1220,14 +1220,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in PostTeamsMessage.");
@@ -1323,9 +1323,9 @@ await response
return response;
}
- catch (Office365ConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "Connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -1333,14 +1333,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in CreateCalendarEvent.");
diff --git a/DirectConnector/ConnectorTriggerMetadataAttribute.cs b/DirectConnector/ConnectorTriggerMetadataAttribute.cs
index fd4ac8e..988ba0c 100644
--- a/DirectConnector/ConnectorTriggerMetadataAttribute.cs
+++ b/DirectConnector/ConnectorTriggerMetadataAttribute.cs
@@ -28,13 +28,13 @@ namespace DirectConnector;
public sealed class ConnectorTriggerMetadataAttribute : Attribute
{
///
- /// The connector API name. Use constants from .
+ /// The connector API name. Use constants from .
///
public string ConnectorName { get; set; } = "";
///
/// The trigger operation name. Use constants from the connector's *TriggerOperations class
- /// (e.g., ).
+ /// (e.g., ).
///
public string OperationName { get; set; } = "";
diff --git a/DirectConnector/DirectConnector.csproj b/DirectConnector/DirectConnector.csproj
index 25131d0..90a936b 100644
--- a/DirectConnector/DirectConnector.csproj
+++ b/DirectConnector/DirectConnector.csproj
@@ -10,11 +10,13 @@
-
-
-
+
+
+
diff --git a/DirectConnector/MqFunctions.cs b/DirectConnector/MqFunctions.cs
index f5a1918..019d31c 100644
--- a/DirectConnector/MqFunctions.cs
+++ b/DirectConnector/MqFunctions.cs
@@ -4,8 +4,8 @@
using System.Net;
using System.Text.Json;
-using Microsoft.Azure.Connectors.DirectClient.Mq;
-using Microsoft.Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk.Mq;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
@@ -85,13 +85,13 @@ await response
return response;
}
- catch (MqConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MQ send failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MQ send failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
@@ -107,7 +107,7 @@ await badRequest
return badRequest;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in MqSendMessage.");
@@ -156,13 +156,13 @@ await response
return response;
}
- catch (MqConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MQ browse failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MQ browse failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
@@ -178,7 +178,7 @@ await badRequest
return badRequest;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in MqBrowseMessage.");
@@ -231,13 +231,13 @@ await response
return response;
}
- catch (MqConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MQ browse batch failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MQ browse batch failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
@@ -253,7 +253,7 @@ await badRequest
return badRequest;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in MqBrowseMessages.");
@@ -302,13 +302,13 @@ await response
return response;
}
- catch (MqConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MQ receive failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MQ receive failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
@@ -324,7 +324,7 @@ await badRequest
return badRequest;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in MqReceiveMessage.");
@@ -378,13 +378,13 @@ await response
return response;
}
- catch (MqConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MQ delete failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MQ delete failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
@@ -400,7 +400,7 @@ await badRequest
return badRequest;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in MqDeleteMessage.");
diff --git a/DirectConnector/MsGraphFunctions.cs b/DirectConnector/MsGraphFunctions.cs
index 7be6cbb..7cac586 100644
--- a/DirectConnector/MsGraphFunctions.cs
+++ b/DirectConnector/MsGraphFunctions.cs
@@ -3,8 +3,8 @@
//------------------------------------------------------------
using System.Net;
-using Microsoft.Azure.Connectors.DirectClient.Msgraphgroupsanduser;
-using Microsoft.Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk.Msgraphgroupsanduser;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
@@ -66,9 +66,9 @@ await response
return response;
}
- catch (MsgraphgroupsanduserConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MS Graph connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MS Graph connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -76,14 +76,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in ListGraphUsers.");
@@ -130,9 +130,9 @@ await response
return response;
}
- catch (MsgraphgroupsanduserConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MS Graph connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MS Graph connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -140,14 +140,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in ListGraphGroups.");
@@ -206,9 +206,9 @@ await response
return response;
}
- catch (MsgraphgroupsanduserConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "MS Graph connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "MS Graph connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -216,14 +216,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetGraphGroupProperties.");
diff --git a/DirectConnector/Office365UsersFunctions.cs b/DirectConnector/Office365UsersFunctions.cs
index d6d4d41..b35faf7 100644
--- a/DirectConnector/Office365UsersFunctions.cs
+++ b/DirectConnector/Office365UsersFunctions.cs
@@ -3,8 +3,8 @@
//------------------------------------------------------------
using System.Net;
-using Microsoft.Azure.Connectors.DirectClient.Office365users;
-using Microsoft.Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk.Office365users;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
@@ -48,18 +48,18 @@ await response
return response;
}
- catch (Office365usersConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "GetMyProfile failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "GetMyProfile failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetMyProfile.");
@@ -97,18 +97,18 @@ await response
return response;
}
- catch (Office365usersConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "GetUserProfile failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "GetUserProfile failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetUserProfile.");
@@ -146,18 +146,18 @@ await response
return response;
}
- catch (Office365usersConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "GetManager failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "GetManager failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetManager.");
@@ -195,18 +195,18 @@ await response
return response;
}
- catch (Office365usersConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "GetDirectReports failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "GetDirectReports failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in GetDirectReports.");
@@ -260,18 +260,18 @@ await response
return response;
}
- catch (Office365usersConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "SearchUsers failed with status '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "SearchUsers failed with status '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
- .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.StatusCode, details = ex.ResponseBody }, cancellationToken)
+ .WriteAsJsonAsync(new { success = false, error = ex.Message, statusCode = ex.Status, details = ex.ResponseBody }, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in SearchUsers.");
diff --git a/DirectConnector/OneDriveFunctions.cs b/DirectConnector/OneDriveFunctions.cs
index f46dbdc..36e9c51 100644
--- a/DirectConnector/OneDriveFunctions.cs
+++ b/DirectConnector/OneDriveFunctions.cs
@@ -5,12 +5,12 @@
using System.Net;
using System.Text;
using System.Text.Json;
-using Microsoft.Azure.Connectors.DirectClient.Onedriveforbusiness;
-using Microsoft.Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk.Onedriveforbusiness;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
-using OneDriveBlobMetadata = Microsoft.Azure.Connectors.DirectClient.Onedriveforbusiness.BlobMetadata;
+using OneDriveBlobMetadata = Azure.Connectors.Sdk.Onedriveforbusiness.BlobMetadata;
namespace DirectConnector;
@@ -103,9 +103,9 @@ await response
return response;
}
- catch (OnedriveforbusinessConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -113,14 +113,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in ListOneDriveRoot.");
@@ -194,9 +194,9 @@ await response
return response;
}
- catch (OnedriveforbusinessConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -204,14 +204,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in ListOneDriveFolder.");
@@ -272,9 +272,9 @@ await response.Body
return response;
}
- catch (OnedriveforbusinessConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -282,14 +282,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in DownloadOneDriveFile.");
@@ -391,9 +391,9 @@ await response
return response;
}
- catch (OnedriveforbusinessConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -401,14 +401,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in UploadOneDriveFile.");
@@ -477,9 +477,9 @@ await response
return response;
}
- catch (OnedriveforbusinessConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -487,14 +487,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in SearchOneDriveFiles.");
@@ -577,9 +577,9 @@ await response
return response;
}
- catch (OnedriveforbusinessConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "OneDrive connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -587,14 +587,14 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
})
.ConfigureAwait(continueOnCapturedContext: false);
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in CreateOneDriveShareLink.");
@@ -817,7 +817,7 @@ await errorResponse
return errorResponse;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in OneDriveTriggerCallback.");
diff --git a/DirectConnector/Program.cs b/DirectConnector/Program.cs
index e88984c..f6cdbde 100644
--- a/DirectConnector/Program.cs
+++ b/DirectConnector/Program.cs
@@ -2,160 +2,30 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
-using DirectConnector.Configuration;
-using Microsoft.Azure.Connectors.DirectClient.Azureblob;
-using Microsoft.Azure.Connectors.DirectClient.Azureloganalytics;
-using Microsoft.Azure.Connectors.DirectClient.Mq;
-using Microsoft.Azure.Connectors.DirectClient.Msgraphgroupsanduser;
-using Microsoft.Azure.Connectors.DirectClient.Office365;
-using Microsoft.Azure.Connectors.DirectClient.Office365users;
-using Microsoft.Azure.Connectors.DirectClient.Onedriveforbusiness;
-using Microsoft.Azure.Connectors.DirectClient.Sharepointonline;
-using Microsoft.Azure.Connectors.DirectClient.Smtp;
-using Microsoft.Azure.Connectors.DirectClient.Teams;
+using Azure.Connectors.Sdk;
using Microsoft.Azure.Functions.Worker;
-using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
-using Microsoft.Extensions.Options;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices((hostContext, services) =>
{
- var configuration = hostContext.Configuration;
-
- // NOTE: Bind connector options from configuration.
- // This uses the Options pattern for hierarchical, validated configuration.
- // See: https://learn.microsoft.com/dotnet/core/extensions/options
- services.AddOptions()
- .Bind(configuration.GetSection(ConnectorOptions.SectionName))
- .ValidateDataAnnotations()
- .ValidateOnStart();
-
- services.AddHttpClient();
+ var connectors = hostContext.Configuration.GetSection("Connectors");
// NOTE: Register generated connector clients as singletons.
- // The factory overload lets DI own the instance lifetime and call Dispose,
- // which exercises the ownership-based disposal pattern: the client will
- // dispose its internally-created HttpClient and DefaultAzureCredential.
- // NOTE: Validation of ConnectionRuntimeUrl is handled by
- // [Required] attribute + ValidateOnStart() at host initialization.
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- // NOTE: When ManagedIdentityClientId is null, use the default constructor so
- // the client relies on DefaultAzureCredential. When ManagedIdentityClientId is non-null
- // (empty string = system-assigned MSI, non-empty = user-assigned MSI), use the MSI constructor.
- return options.Office365.ManagedIdentityClientId != null
- ? new Office365Client(
- options.Office365.ConnectionRuntimeUrl,
- options.Office365.ManagedIdentityClientId)
- : new Office365Client(options.Office365.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- // NOTE: When ManagedIdentityClientId is null, use the default constructor so
- // the client relies on DefaultAzureCredential. When ManagedIdentityClientId is non-null
- // (empty string = system-assigned MSI, non-empty = user-assigned MSI), use the MSI constructor.
- return options.SharePoint.ManagedIdentityClientId != null
- ? new SharepointonlineClient(
- options.SharePoint.ConnectionRuntimeUrl,
- options.SharePoint.ManagedIdentityClientId)
- : new SharepointonlineClient(options.SharePoint.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.Teams.ManagedIdentityClientId != null
- ? new TeamsClient(
- options.Teams.ConnectionRuntimeUrl,
- options.Teams.ManagedIdentityClientId)
- : new TeamsClient(options.Teams.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.OneDrive.ManagedIdentityClientId != null
- ? new OnedriveforbusinessClient(
- options.OneDrive.ConnectionRuntimeUrl,
- options.OneDrive.ManagedIdentityClientId)
- : new OnedriveforbusinessClient(options.OneDrive.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.MsGraph.ManagedIdentityClientId != null
- ? new MsgraphgroupsanduserClient(
- options.MsGraph.ConnectionRuntimeUrl,
- options.MsGraph.ManagedIdentityClientId)
- : new MsgraphgroupsanduserClient(options.MsGraph.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.AzureBlob.ManagedIdentityClientId != null
- ? new AzureblobClient(
- options.AzureBlob.ConnectionRuntimeUrl,
- options.AzureBlob.ManagedIdentityClientId)
- : new AzureblobClient(options.AzureBlob.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.Smtp.ManagedIdentityClientId != null
- ? new SmtpClient(
- options.Smtp.ConnectionRuntimeUrl,
- options.Smtp.ManagedIdentityClientId)
- : new SmtpClient(options.Smtp.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.Mq.ManagedIdentityClientId != null
- ? new MqClient(
- options.Mq.ConnectionRuntimeUrl,
- options.Mq.ManagedIdentityClientId)
- : new MqClient(options.Mq.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.Office365Users.ManagedIdentityClientId != null
- ? new Office365usersClient(
- options.Office365Users.ConnectionRuntimeUrl,
- options.Office365Users.ManagedIdentityClientId)
- : new Office365usersClient(options.Office365Users.ConnectionRuntimeUrl);
- });
-
- services.AddSingleton(serviceProvider =>
- {
- var options = serviceProvider.GetRequiredService>().Value;
-
- return options.AzureLogAnalytics.ManagedIdentityClientId != null
- ? new AzureloganalyticsClient(
- options.AzureLogAnalytics.ConnectionRuntimeUrl,
- options.AzureLogAnalytics.ManagedIdentityClientId)
- : new AzureloganalyticsClient(options.AzureLogAnalytics.ConnectionRuntimeUrl);
- });
+ // Each extension method reads ConnectionRuntimeUrl (required) and
+ // ManagedIdentityClientId (optional) from the configuration section.
+ services
+ .AddOffice365Client(connectors.GetSection("Office365"))
+ .AddSharepointonlineClient(connectors.GetSection("SharePoint"))
+ .AddTeamsClient(connectors.GetSection("Teams"))
+ .AddOnedriveforbusinessClient(connectors.GetSection("OneDrive"))
+ .AddMsgraphgroupsanduserClient(connectors.GetSection("MsGraph"))
+ .AddAzureblobClient(connectors.GetSection("AzureBlob"))
+ .AddSmtpClient(connectors.GetSection("Smtp"))
+ .AddMqClient(connectors.GetSection("Mq"))
+ .AddOffice365usersClient(connectors.GetSection("Office365Users"));
})
.Build();
diff --git a/DirectConnector/SmtpFunctions.cs b/DirectConnector/SmtpFunctions.cs
index d84a1ce..a896a06 100644
--- a/DirectConnector/SmtpFunctions.cs
+++ b/DirectConnector/SmtpFunctions.cs
@@ -4,8 +4,8 @@
using System.Net;
using System.Text.Json;
-using Microsoft.Azure.Connectors.DirectClient.Smtp;
-using Microsoft.Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk;
+using Azure.Connectors.Sdk.Smtp;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
@@ -91,9 +91,9 @@ await response
return response;
}
- catch (SmtpConnectorException ex)
+ catch (ConnectorException ex)
{
- this._logger.LogError(ex, "SMTP connector error: '{StatusCode}'.", ex.StatusCode);
+ this._logger.LogError(ex, "SMTP connector error: '{StatusCode}'.", ex.Status);
var errorResponse = request.CreateResponse(HttpStatusCode.BadGateway);
await errorResponse
@@ -101,7 +101,7 @@ await errorResponse
{
success = false,
error = ex.Message,
- statusCode = ex.StatusCode,
+ statusCode = ex.Status,
details = ex.ResponseBody
}, cancellationToken)
.ConfigureAwait(continueOnCapturedContext: false);
@@ -119,7 +119,7 @@ await badRequest
return badRequest;
}
- catch (Exception ex) when (!ex.IsFatal())
+ catch (Exception ex) when (ex is not OperationCanceledException)
{
this._logger.LogError(ex, "Error in SmtpSendEmail.");