web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Apps / CustomConnector Error ...
Power Apps
Unanswered

CustomConnector Error - invalid data from response

(1) ShareShare
ReportReport
Posted on by 153

image.png

My Custom Connector is actually working. The response is a string, so there shouldnt be a problem with "invalid data"

image.png

 

 

 

{
 "swagger": "2.0",
 "info": {
 "version": "1.0.0",
 "title": "MyAzureFunction"
 },
 "host": "Website",
 "paths": {
 "/api/ConvertMe": {
 "get": {
 "description": "Calls my azure function over https",
 "operationId": "ConvertMe",
 "parameters": [
 {
 "name": "code",
 "in": "query",
 "description": "code",
 "default": "API CODE",
 "type": "string"
 },
 {
 "name": "image1",
 "in": "query",
 "required": true,
 "type": "string"
 },
 {
 "name": "image2",
 "in": "query",
 "required": true,
 "type": "string"
 }
 ],
 "responses": {
 "200": {
 "description": "Successful response",
 "schema": {
 "title": "The response of the api.",
 "type": "string"
 }
 },
 "204": {
 "description": "Successful response",
 "schema": {
 "title": "No Content",
 "type": "string"
 }
 },
 "default": {
 "description": "default",
 "schema": {
 "type": "string"
 },
 "headers": {
 "default": {
 "description": "default",
 "type": "string"
 }
 }
 }
 },
 "summary": "APPCALL"
 }
 }
 },
 "securityDefinitions": {}
}

 

 

 

 

Any ideas how I can fix this problem ? 

 

Categories:
I have the same question (0)
  • MacWin Profile Picture
    153 on at

    It only works if I use a flow for this.

     

    Is it possible to do this without using a flow ? 

     

  • MacWin Profile Picture
    153 on at

    new Error I dont understand.

    does this error occurs because the string (base64) is to long for the query request ?
    image.png

     

    The azure function 

     

     

     string Image1 = req.Query["image1"];
     string Image2 = req.Query["image2"];
    
     
     if (!string.IsNullOrEmpty(Image1) || (!string.IsNullOrEmpty(Image2)))
     {
    
     Image1 = Image1.ToString()?.Replace(@"data:image/png;base64,","");
     Image2 = Image2.ToString()?.Replace(@"data:image/png;base64,", "");
    
     MagickImage _Main = new MagickImage(Convert.FromBase64String(Image1), MagickFormat.Png);
     MagickImage _Overlay = new MagickImage(Convert.FromBase64String(Image2), MagickFormat.Png);
    
     using (MemoryStream memory = new MemoryStream())
     {
     Converter.ComebineBitmap(_Main, _Overlay).Write(memory, MagickFormat.Png);
     memory.Position = 0;
    
    
     log.LogInformation($"Result: {Convert.ToBase64String(memory?.ToArray())}");
     return Convert.ToBase64String(memory?.ToArray());
    
     }
     }
     else
     {
     return null;
    
     }
     

     

     

     

     This is my function which already works on local image.png

     

    this error occurs testing with the same base64 in my custom connector.

    image.png

    or testing in my azure function itself

    image.png

    Im kinda confused, because there a so many different error message ^^

     

  • Verified answer
    v-xida-msft Profile Picture
    on at

    Hi @Macwin ,

    Do you put the image1 and image2 as Query parameter within the action path in your custom connector?

     

    Based on the issue that you mentioned, I think this issue is related to the image1 and image2 as Query parameter in your action path ("ConvertMe") of your custom connnector.

     

    Actually, there are some known limits on Query string of HTTP Request, please check the following article for more details:

    https://stackoverflow.com/questions/812925/what-is-the-maximum-possible-length-of-a-query-string

    https://stackoverflow.com/questions/3091485/what-is-the-limit-on-querystring-get-url-parameters?lq=1

     

    If you provided a value which is more than the HTTP Request Query String limit for the image1 and image2 parameter, you would get the error that you mentioned.

     

    As an fixed solution, please consider put the image1 and image2 parameter as Request Body parameter rather than Query string parameter within the action path of your custom connector, then re-publish your custom connector, check if the issue is solved.

    Note: You also need to change the HTTP Method (operation) from "GET" to "POST".

     

    On your side, please consider modify your OpenAPI definition file as below:

    {
     "swagger": "2.0",
     "info": {
     "version": "1.0.0",
     "title": "MyAzureFunction"
     },
     "basePath": "/",
     consumes: [],
     produces: [],
     "schemes": [
     "https"
     ],
     "host": "Website",
     "paths": {
     "/api/ConvertMe": {
     "post": {
     "description": "Calls my azure function over https",
     "operationId": "ConvertMe",
     "parameters": [
     {
     "name": "imageBody",
     "in": "body",
     "description": "image body data for converting",
     "schema": {
     "type": "object",
     "required": [
     "image1",
     "image2"
     ],
     "properties": {
     "code": {
     "type": "string",
     "default": "API CODE",
     "description": "code"
     },
     "image1": {
     "type": "string"
     },
     "image2": {
     "type": "string"
     }
     }
     }
     }
     ],
     "responses": {
     "200": {
     "description": "Successful response",
     "schema": {
     "title": "The response of the api.",
     "type": "string"
     }
     },
     "204": {
     "description": "Successful response",
     "schema": {
     "title": "No Content",
     "type": "string"
     }
     },
     "default": {
     "description": "default",
     "schema": {
     "type": "string"
     },
     "headers": {
     "default": {
     "description": "default",
     "type": "string"
     }
     }
     }
     },
     "summary": "APPCALL"
     }
     }
     },
     "securityDefinitions": {}
    }

     

    More details about defining Request Body parameter in Open API definition file, please check the following article:

    https://swagger.io/docs/specification/describing-request-body/

     

    You need to modify your Azure function to receive HTTP POST request from this custom connector rather than GET request. Please remove previous custom connector, then re-add a new one based on above modified OpenAPI definition file, then check if the issue is solved.

     

    More details about creating custom connector in PowerApps, please refer to the following article:

    https://docs.microsoft.com/en-us/connectors/custom-connectors/define-openapi-definition

     

    Best regards,

  • MacWin Profile Picture
    153 on at

    thank you very much.

    but I´m still kinda confused how to edit my azure function for receiving req.body.

    do you have an example in c# for request body?

  • v-xida-msft Profile Picture
    on at

    Hi @Macwin ,

    Yeah, please check and see if the following blog would help in your scenario:

    https://softwareengineering.stackexchange.com/questions/245921/how-to-structure-rest-api-service-that-accepts-post-parameters-in-the-body

    https://dotnettutorials.net/lesson/post-method-in-web-api/

     

    Please consider take a try with above solution, then modify your Azure function, then check if the issue is solved. If the solution I provided above is helpful in your scenario, please consider click "Accept as Solution" to identify this thread has been solved.

     

    Best regards,

  • MacWin Profile Picture
    153 on at

    unfortunately the links does not help on my scenario :S

    I dont know how to get my image objects to my function 

     

     

     [FunctionName("ConvertMe")]
     public static async Task<string> RunAsync
     ([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log)
     {
     log.LogInformation($"Received a Request");
     ConvertMe Converter = new ConvertMe();
    
    
     var content = await new StreamReader(req.Body).ReadToEndAsync();
     Imagebody imagebody = JsonConvert.DeserializeObject<Imagebody>(content);
    
     MagickImage _Main = new MagickImage(Convert.FromBase64String(imagebody.image1), MagickFormat.Png);
     MagickImage _Overlay = new MagickImage(Convert.FromBase64String(imagebody.image2), MagickFormat.Png);
    
     using (MemoryStream memory = new MemoryStream())
     {
     Converter.ComebineBitmap(_Main, _Overlay).Write(memory, MagickFormat.Png);
     memory.Position = 0;
     log.LogInformation($"Result: {Convert.ToBase64String(memory?.ToArray())}");
     return @"data&colon;image/png;base64," + Convert.ToBase64String(memory?.ToArray());
     }
     }
     }
    
     public class Imagebody
     {
     public string code { get; set; }
     public string image1 { get; set; }
     public string image2 { get; set; }
     }

     

     

    image.png

     

  • MacWin Profile Picture
    153 on at

    Ok the function works 

     public static class Function1
     {
     [FunctionName("ConvertMe")]
     public static async Task<string> RunAsync
     ([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log)
     {
     log.LogInformation($"Received a Request");
     ConvertMe Converter = new ConvertMe();
    
    
     var content = await new StreamReader(req.Body).ReadToEndAsync();
     Imagebody imagebody = JsonConvert.DeserializeObject<Imagebody>(content);
    
     MagickImage _Main = new MagickImage(Convert.FromBase64String(imagebody.image1), MagickFormat.Png);
     MagickImage _Overlay = new MagickImage(Convert.FromBase64String(imagebody.image2), MagickFormat.Png);
    
     using (MemoryStream memory = new MemoryStream())
     {
     Converter.ComebineBitmap(_Main, _Overlay).Write(memory, MagickFormat.Png);
     memory.Position = 0;
     log.LogInformation($"Result: {Convert.ToBase64String(memory?.ToArray())}");
     return Convert.ToBase64String(memory?.ToArray());
    
     //@"data&colon;image/png;base64," + 
     }
     }
     }
    
     public class Imagebody
     {
     public string code { get; set; }
     public string image1 { get; set; }
     public string image2 { get; set; }
     }}

    image.png

     

    but if I use it on my custom connector Im receiving a 401 error.

     

    image.png

  • v-xida-msft Profile Picture
    on at

    Hi @Macwin ,

    The HTTP 401 error means that you have faced a Authorization issue with custom connector. On your side, please consider create a new connection to your custom connector from your PowerApps when testing your custom connector, then check if the issue is solved.

     

    Also please make sure you have specified proper Authentication way within your custom connector.

     

    Best regards, 

  • MacWin Profile Picture
    153 on at

    does this 401 error occurs because I dont use my function key not as query anymore ? he is in the request body now.

    If this is the problem how do I have to call this in my function and do I need to change the swagger like this? 
    image.png

     

    and Im going to update my security after this Environment works 🙂 

     

    edit:// my  flow is working now

    image.png

     

    what are the next step to improve the perfomance ? I mean 22 seconds is to much ^^

     

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Forum hierarchy changes are complete!

In our never-ending quest to improve we are simplifying the forum hierarchy…

Ajay Kumar Gannamaneni – Community Spotlight

We are honored to recognize Ajay Kumar Gannamaneni as our Community Spotlight for December…

Leaderboard > Power Apps

#1
WarrenBelz Profile Picture

WarrenBelz 717 Most Valuable Professional

#2
Michael E. Gernaey Profile Picture

Michael E. Gernaey 329 Super User 2025 Season 2

#3
Power Platform 1919 Profile Picture

Power Platform 1919 268

Last 30 days Overall leaderboard