cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
ErickDiaz
Resolver I
Resolver I

How to Specify a Raw Body on a Custom Connector instead of JSON?

Hi,

 

I’m creating a Flow process that uses a custom connector to access an on-prem API using the data gateway. I’m on the first step process to get the access token, the POST method expects a raw body as follow:

 

grant_type=password&username=myusername123&password=mypassword123&scope=api

 

Unfortunately, the custom connector only allows me to define the body in a JSON format so my connector is failing because of the body:

 

{
"grant_type" : "password",
"username" : "myusername123",
"password" : "mypassword123",
"scope" : "api"
}

 

When testing the custom connector, there is an option that let’s me specify a raw body and the test is successful.

 

Custom Connector - JSON Body Failed 400:

Custom Connector - JSON Body Failed 400.jpg

 

Custom Connector - Raw Body Succeeded 200:

Custom Connector - Raw Body Succeeded 200.jpg

 

However, when I create my flow, I do not have the option to pass the body as raw:

 

Flow - Cannot Specify Raw Body Option.jpg

 

Any idea how to pass a raw body to my custom connector?

 

Thank you,

 

Erick

1 ACCEPTED SOLUTION

Accepted Solutions

I found a very simple fix, I just had to specify an empty string with double quotes (i.e. "") as the Body and that prevented Power Apps from converting my parameter (grant_type=password&username=myusername123&password=mypassword123&scope=api) to JSON.

View solution in original post

9 REPLIES 9
dpoggemann
Super User
Super User

Hi @ErickDiaz,

 

I think you might want to move this post to the Power Automate forum (https://powerusers.microsoft.com/t5/Microsoft-Power-Automate/ct-p/MPACommunity).  I think you will get more responses there since focus is not really Dataverse from what I see...

 

Thanks!


Drew 

Hi Drew (@dpoggemann),

 

Thank you for your suggestion, I'll try to create this post in the Power Automate forum.

 

I will also leave it here as this is related to Custom Connectors and the fact that I can only specify the body in a JSON format on the request definition:

 

Custom Connector - Body Request Definition.jpg

 

Thank you,

 

Erick

 

I found a very simple fix, I just had to specify an empty string with double quotes (i.e. "") as the Body and that prevented Power Apps from converting my parameter (grant_type=password&username=myusername123&password=mypassword123&scope=api) to JSON.

View solution in original post

@ErickDiaz can you elaborate as to where you placed the empty string?

I am having a problem which I discuss at length here.

With the API call I am trying to make, I can pass in {} for the body in Postman and I get a successful response. In the custom connector, if I fail to set the body parameters or otherwise leave the body empty, it uses {} for the body and it just works. So it seems like I don't need to pass in any body parameters at all, as long as it has "body": {}. Well whenever I run the custom connector from a Power App button, the Power App Monitor shows "body": "" and the response is failed.

So as far as I can tell, Power Apps is not able to pass in any kind of raw body to the connector, and there is no way to get the connector to use its defaults. I have even tried setting policies to update body parameters from headers that I pass in from Power Apps. I am able to pass in headers and use policies to set news header values using those passed in from Power App arguments in function editor, and this trick works to set an Authorization Basic <base 64 string> header whereas normally "Basic" is replaced with "Bearer" and the token is some random token which I did not input, so the API call does not work. My policy to set authorization header fixes that, but it's not working for setting body parameters.

I use policies to set body parameters, and it does not seem like they are overriding null inputs to those parameters. Within the custom connector, the body always goes as {}, unless you set the body parameters to visibility: important and allow the default values to populate in the "Test Operation" box. But within Power App, the body always goes as "" no matter what. There is no way to populate body params by default values! As far as I can tell anyway...

Hi @HEATFreight,

 

In the Custom Connector, when creating a new Request Definition (Get, Delete, Post, etc...) that you have to specify a URL, Headers, and Body; the Body asks for a JSON object, if you enter an empty string with double quotes (""), this will allow to pass a raw body when calling the method from e.g. Power Automate.

 

I hope it helps and good luck!

 

Erick

Thanks @ErickDiaz! I haven't tried calling the Custom Connector from Power Automate because I have HTTP actions in Power Automate that achieve the same result. It would be more convenient for deploying my Power App  (as distinguished from Power Automate) if I could get the custom connector working specifically within Power Apps. I'm pretty sure it would work as-is in Power Automate. It's Power Apps where I'm having a problem.

I do not believe using the empty string in the definition of my custom connector will fix the Power Apps issue, but I will certainly give it a shot.

Just to be clear, you are referring to the "Import from sample" inputs right? I have tried all sorts of things for the Body criteria of "Import from sample", but not yet an empty string! Will update with results...

I have tried placing a pair of double quotes in the body field of the Custom Connector "Import from sample" but I don't think it's working as intended.

Here's the schema that it automatically generated (URL excluded because of NDA):

HEATFreight_0-1632420414478.png

The body has one parameter that automatically was created from the "" sample body, and it's name is "key-body-output", although curiously the Title and Description fields are empty.

HEATFreight_1-1632420485038.png

HEATFreight_2-1632420515953.png


I placed the default value of "" in there myself. The schema doesn't automatically convert the provided sample into the default value field, so I did that myself after first testing it without any default value. Without the default "key-body-output" value of "", the Power App button fails to make the call with a valid body. Still see the request body as body: "" in Power App Monitor. Running directly with "Test operation" in Custom Connector works fine though, with body: {} automatically populated. Keep in mind, this is before I set the default value, like even with no default value set, it always populates body field with {} in the "Test operation". 

After setting default value for "key-body-output" to the empty double quotes, the default body fails to populate in the "Test operation". If I click "Raw Body", the body shows up as {}. If I then disable "Raw Body", the body field populates itself with [object Object]. Both {} and [object Object] work as valid body inputs for "Test operation". We get a valid response. However, the request body always shows up as {} regardless of whether "Raw body" is enabled or disabled. If I change the empty body in "Test operation" (remember, the default value empty string isn't being passed to the body field for "Test operation"), and make it the empty double quotes, then I get the following error both with "Raw body" enabled and disabled:

 Property "" type mismatch, Expected: "object", Actual: "array".


And of course the Power App fails to send valid body in all of the above cases.

I think this is a Power Apps problem, not a Custom Connector problem per se. I would bet that the Custom Connector works in Power Automate, but don't have time to test it right now.

Literally all I want to do is send a valid JSON string to the body parameter of an API call. It works in Custom Connector "Test operation" whether I give it a valid body or no body at all, but can't figure out how to make it work when calling Custom Connector in Power App. Seems to be that Power App wants to send a string even though the body is technically an object. Not sure how to trick Power App function call into accepting an object as a string parameter! This seems to be the crux of the issue as far as I can tell.

HEATFreight
Advocate III
Advocate III

Yeah, I'm now calling Power Automate flows in the Power App and running the HTTP requests within Power Automate instead of Custom Connector, and that seems to be the ticket!

I had high hopes for the Custom Connector but I think it's bugged out. The same functionality should be possible within a  Custom Connector as with a Power Automate HTTP request, but it's simply not. Custom Connectors may work for really specific use cases, but otherwise that crap is broken!

Really frustrating experience attempting to troubleshoot Custom Connector.

Had opposite experience with connecting Power App to Power Automate, once I understood the Power Apps trigger and response action in Power Automate. Very smooth!

Still have not tried using the Custom Connector in Power Automate, because my HTTP request can do the same thing but with less effort. There is a chance my desired functionality works when calling Custom Connector within Power Automate but not within Power Apps. Who knows... But I'm over it. HTTP request is the bee's knees.

Hey @HEATFreight,

 

I'm glad you figured out a workaround and sorry I couldn't help more, I'm relatively new to the whole Power Platform ecosystem.

 

Regards,

 

Erick

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

Microsoft Ignite 768x460.png

Find your focus

Explore the latest tools,training sessions,technical expertise, networking and more.

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

Welcome Super Users.jpg

Super User Season 2

Congratulations, the new Super User Season 2 for 2021 has started!

Carousel 2021 Release Wave 2 Plan 768x460.jpg

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

Users online (2,486)