Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! It's time to submit your entry. Live now!
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-POWER/td-p/223243
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:)
The Power BI Data Visualization World Championships is back! It's time to submit your entry.
| User | Count |
|---|---|
| 4 | |
| 3 | |
| 2 | |
| 2 | |
| 1 |
| User | Count |
|---|---|
| 5 | |
| 5 | |
| 4 | |
| 4 | |
| 3 |