Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
Anonymous
Not applicable

Update Credentials C#

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?

1 ACCEPTED SOLUTION
Anonymous
Not applicable

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.

 

View solution in original post

3 REPLIES 3
Eric_Zhang
Microsoft Employee
Microsoft Employee


@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?

Anonymous
Not applicable

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:)

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

Find out what's new and trending in the Fabric community.

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.

Join our Fabric User Panel

Join our Fabric User Panel

This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.