Skip to content

Commit 02cce2f

Browse files
Srinivas ThatipamulaCopilot
andcommitted
Add JSON validation for settings methods and read API response in role creation
- ModifyDiagnosticsAsync and ModifyImmutabilityPolicyAsync now validate JSON input early with JsonDocument.Parse, throwing a clear ArgumentException for malformed JSON. - CreateOrUpdateDataAccessRoleAsync now reads and deserializes the API response stream to preserve server-assigned fields (id, eTag, etc.), aligning with CreateOrUpdateShortcutsAsync behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 714e2e8 commit 02cce2f

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

tools/Fabric.Mcp.Tools.OneLake/src/Services/OneLakeService.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1958,8 +1958,8 @@ public async Task<DataAccessRole> CreateOrUpdateDataAccessRoleAsync(string works
19581958
// touching other roles on the item (unlike the bulk PUT approach).
19591959
var url = $"{OneLakeEndpoints.GetFabricApiBaseUrl()}/workspaces/{workspaceId}/items/{itemId}/dataAccessRoles?preview=true&dataAccessRoleConflictPolicy=Overwrite";
19601960
var requestBody = JsonSerializer.Serialize(roleDefinition, OneLakeJsonContext.Default.DataAccessRole);
1961-
await SendFabricApiRequestAsync(HttpMethod.Post, url, requestBody, cancellationToken: cancellationToken);
1962-
return roleDefinition;
1961+
var responseStream = await SendFabricApiRequestAsync(HttpMethod.Post, url, requestBody, cancellationToken: cancellationToken);
1962+
return await JsonSerializer.DeserializeAsync(responseStream, OneLakeJsonContext.Default.DataAccessRole, cancellationToken) ?? roleDefinition;
19631963
}
19641964

19651965
public async Task DeleteDataAccessRoleAsync(string workspaceId, string itemId, string roleName, CancellationToken cancellationToken = default)
@@ -2053,12 +2053,30 @@ public async Task<OneLakeSettings> GetSettingsAsync(string workspaceId, Cancella
20532053

20542054
public async Task ModifyDiagnosticsAsync(string workspaceId, string diagnosticsConfigJson, CancellationToken cancellationToken = default)
20552055
{
2056+
try
2057+
{
2058+
using var doc = JsonDocument.Parse(diagnosticsConfigJson);
2059+
}
2060+
catch (JsonException ex)
2061+
{
2062+
throw new ArgumentException($"Invalid diagnostics configuration JSON: {ex.Message}", nameof(diagnosticsConfigJson), ex);
2063+
}
2064+
20562065
var url = $"{OneLakeEndpoints.GetFabricApiBaseUrl()}/workspaces/{workspaceId}/onelake/settings/modifyDiagnostics";
20572066
await SendFabricApiRequestAsync(HttpMethod.Post, url, diagnosticsConfigJson, cancellationToken: cancellationToken);
20582067
}
20592068

20602069
public async Task ModifyImmutabilityPolicyAsync(string workspaceId, string immutabilityPolicyJson, CancellationToken cancellationToken = default)
20612070
{
2071+
try
2072+
{
2073+
using var doc = JsonDocument.Parse(immutabilityPolicyJson);
2074+
}
2075+
catch (JsonException ex)
2076+
{
2077+
throw new ArgumentException($"Invalid immutability policy JSON: {ex.Message}", nameof(immutabilityPolicyJson), ex);
2078+
}
2079+
20622080
var url = $"{OneLakeEndpoints.GetFabricApiBaseUrl()}/workspaces/{workspaceId}/onelake/settings/modifyImmutabilityPolicy";
20632081
await SendFabricApiRequestAsync(HttpMethod.Post, url, immutabilityPolicyJson, cancellationToken: cancellationToken);
20642082
}

0 commit comments

Comments
 (0)