Get certified for free when you join Fabric Data Days 2026 and dive into Fabric, Power BI, SQL, AI, and other essential data skills.
Join nowData Days is here! Join us now for 60+ days of learning, challenges, and connection. Learn more
Hi,
following the instructions given in this post: http://community.powerbi.com/t5/Developer/How-do-I-update-the-Credentials-after-I-upload-a-report-to...
I ended up with the following snippet:
var gateway = (await m_powerBIClient.Gateways.GetGatewayByIdWithHttpMessagesAsync (datasource.GatewayId,
cancellationToken: cancellationToken)).Body;
var credentials = AsymmetricKeyEncryptionHelper.EncodeCredentials (username, password, gateway.PublicKey.Exponent, gateway.PublicKey.Modulus);
var response = await m_powerBIClient.Gateways.UpdateDatasourceWithHttpMessagesAsync (
gateway.Id,
datasource.Id,
new UpdateDatasourceRequest (
new CredentialDetails (
credentials,
credentialType: "Basic",
encryptedConnection: "Encrypted",
encryptionAlgorithm: "RSA-OAEP",
privacyLevel: "Public"
)
),
cancellationToken: cancellationToken);But this leads to an internal server error. Do you know what is the missing part to get it running?
Solved! Go to Solution.
I have found out that the BadRequest was already in the GetGatewayByIdWithHttpMessagesAsync call. But nevertheless I found an easier way to handle the problem:
var request = new HttpRequestMessage (
new HttpMethod ("PATCH"),
$"https://api.powerbi.com/v1.0/myorg/gateways/{gatewayDatasource.GatewayId}/datasources/{gatewayDatasource.Id}");
request.Content = new StringContent (
$@" {{
'credentialType': 'Basic',
'basicCredentials': {{
'username': '{username}',
'password': '{password}'
}}
}}");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse ("application/json");
await m_powerBIClient.Credentials.ProcessHttpRequestAsync (request, cancellationToken);
No nasty encryption as it is a secure connection anyway. Wondering why basic credentials are not supported by the C# API.
@Anonymous wrote:
Hi,
following the instructions given in this post: http://community.powerbi.com/t5/Developer/How-do-I-update-the-Credentials-after-I-upload-a-report-to...
I ended up with the following snippet:
var gateway = (await m_powerBIClient.Gateways.GetGatewayByIdWithHttpMessagesAsync (datasource.GatewayId, cancellationToken: cancellationToken)).Body; var credentials = AsymmetricKeyEncryptionHelper.EncodeCredentials (username, password, gateway.PublicKey.Exponent, gateway.PublicKey.Modulus); var response = await m_powerBIClient.Gateways.UpdateDatasourceWithHttpMessagesAsync ( gateway.Id, datasource.Id, new UpdateDatasourceRequest ( new CredentialDetails ( credentials, credentialType: "Basic", encryptedConnection: "Encrypted", encryptionAlgorithm: "RSA-OAEP", privacyLevel: "Public" ) ), cancellationToken: cancellationToken);But this leads to an internal server error. Do you know what is the missing part to get it running?
@Anonymous
The code demo in this thread indeed works in my test when updating a datasource for a specific gateway. To have better troubleshooting, please add try..catch block to get the detailed error message for your code.
try{
//your code here
}
catch (HttpOperationException ex)
{
//Bad Request
var content = ex.Response.Content;
Console.WriteLine(content);
}
By the way, have you debugged the code and which code line raised the error?
I have found out that the BadRequest was already in the GetGatewayByIdWithHttpMessagesAsync call. But nevertheless I found an easier way to handle the problem:
var request = new HttpRequestMessage (
new HttpMethod ("PATCH"),
$"https://api.powerbi.com/v1.0/myorg/gateways/{gatewayDatasource.GatewayId}/datasources/{gatewayDatasource.Id}");
request.Content = new StringContent (
$@" {{
'credentialType': 'Basic',
'basicCredentials': {{
'username': '{username}',
'password': '{password}'
}}
}}");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse ("application/json");
await m_powerBIClient.Credentials.ProcessHttpRequestAsync (request, cancellationToken);
No nasty encryption as it is a secure connection anyway. Wondering why basic credentials are not supported by the C# API.
There is currently some issue with V2 client.Gateways.UpdateDatasourceAsync
The body which is sent using that method:
{
"credentialDetails": {
"credentials": "{\"credentialType\":\"Basic\",\"basicCredentials\":{\"username\":\"usrnmame\",\"password\":\"password\"}}"
}
}where the correct one should be:
{
"credentialType":"Basic",
"basicCredentials":{"username":"usrname","password":"password"}
}Simple http request as pointed above will work just fine:)
Don't miss out on Data Days, June 15 through August 7. Learn Fabric, Power BI, SQL, AI and more.
Check out the May 2026 Power BI update to learn about new features.
| User | Count |
|---|---|
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 |