Click here to Skip to main content
15,886,689 members
Articles / Web Development

Contact Web API from InfoPath Designer 2013

Rate me:
Please Sign up or sign in to vote.
0.00/5 (No votes)
11 Feb 2014CPOL1 min read 10.8K  
How to contact Web API from InfoPath Designer 2013

I was having some trouble getting values from my home-brewed web API into an InfoPath Designer 2013 form, so I wanted to document the solution for those of you out there perhaps struggling with this as well.

I was calling a simple 'Hello World'-web API that would return a string. My simple API looks like this:

C#
namespace ADlookup.Controllers
{
/* model */
public class employee
{
public string employeeId { get; set; }
public string bossId { get; set; }
}
public class ADLookupController : ApiController
{
[HttpGet]
public employee getNearestBossId([FromUri] string id)
{
return new employee()
{
employeeId = id,
bossId = id
};
}
}
}

However, upon calling this API in InfoPath Designer 2013, I got the following error message:

... to indicate the XML structure is invalid.

I didn't get it - when I called the service directly from my browser, valid XML was returned!:

The problem, as it turned out, was of course the one that as opposed to the XML displayed by my browsers, the InfoPath Designer application - correctly - retrieved the data by way of json, the web APIs default MO.

So, in order to serve up only XML, for InfoPath to agree with, we'll strip away the web API's possibility of serving up json altogether. Modify your WebApiConfig to resemble the below, though of course take into consideration the routes you have for your own app:

C#
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

// the below must be enabled if this rest service is used with 
// infopath designer 2013 - it only accepts xml data. 
// thus we'll remove the json return type
var formatters = GlobalConfiguration.Configuration.Formatters;
formatters.Remove(formatters.JsonFormatter);
}
}

Now, as we re-publish the web API service, we can try once more the URL in InfoPath, which will now allow us to proceed to the next step:

Intriguingly, on a completely different note, the 'get data from http rest service' workflow component in Sharepoint Designer 2013 works off JSON, as opposed to XML! But that's a blog-entry for another rainy day.

Hope this helps someone, anyone.

Thanks for reading.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Denmark Denmark
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
-- There are no messages in this forum --