Create an export and download a file
1. Overview
This article will guide you through exporting a dashboard, report, or other view type to PDF and then saving it to a file using the REST API. For example, you could embed a view into another web application and trigger the file export from the parent application toolbar.
To create an export and a download a file you will need to do the following:
- Log on and get a session
 - Create an export
 - Download the export result
 
2. Log on and get a session
To log on and get a session using the REST API, you will need to make a POST /API/LogOn request. The following is an example of how to accomplish this:
using System.Net;
using System.Net.Http;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization;
using System.Globalization;
// ... 
string baseUrl = "http://localhost:8010";
var cookieContainer = new CookieContainer();
string sessionId = string.Empty;
using (HttpClientHandler httpClientHandler = new HttpClientHandler())
{
    httpClientHandler.CookieContainer = cookieContainer;
	using (HttpClient httpClient = new HttpClient(httpClientHandler))
	{
		// Get Session ID
		string logonUri = string.Concat(baseUrl, "/Api/LogOn/");
			
		var logonOptions = new
		{
			accountName = "admin",
			password = "1234",
			cultureName = string.Empty,
			deleteOtherSessions = true,
			isWindowsLogOn = false
		};
	
		JavaScriptSerializer serializer = new JavaScriptSerializer();
		var requestBodyAsString = serializer.Serialize(logonOptions);
		StringContent content = new StringContent(
			requestBodyAsString,
			Encoding.UTF8,
			"application/json"
		);
			
		string jsonString = string.Empty;
	
		using (var response = httpClient.PostAsync(logonUri, content).Result)
		{
			jsonString = response.Content.ReadAsStringAsync().Result;
		}
	
		var obj = (Dictionary<string, object>)serializer.DeserializeObject(jsonString);
		
		sessionId = obj["sessionId"].ToString();
		// ...
    }
}
3. Create an export
After getting a session ID, you can create an export. This will be accomplished by making a POST /API/Export call to the REST API. The following example creates an export for the view with a particular ID. The providerId is 5752eb39-40b5-4d79-b96b-9f9297c67193 which is the standard PDF export provider ID. The isLegacyExport property is set to true to avoid passing the viewData property.
string url = string.Format(
	CultureInfo.InvariantCulture,
	"{0}/API/Export/",
	baseUrl
);
var exportRequestOptions = new 
{
	__classType = "dundas.export.ExportRequest",
	isLegacyExport = true,
	// PDF Exporter
	providerId = "5752eb39-40b5-4d79-b96b-9f9297c67193",
	viewId = "e16138cd-b78f-4c43-9b2d-d0e68f427998"
};
requestBodyAsString = serializer.Serialize(exportRequestOptions);
string exportResultId = string.Empty; 
// Add an Authorization header (v10 and higher)
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", sessionId);
// Define the request body
HttpContent requestBody = null;
requestBody = new StringContent(requestBodyAsString, Encoding.UTF8," application/json");
using (var response = httpClient.PostAsync(url, requestBody).Result)
{
	if (response.StatusCode == HttpStatusCode.OK)
	{
		Console.WriteLine("Success");
		string jsonObject = response.Content.ReadAsStringAsync().Result;
		
		exportResultId = jsonObject.Trim('\"');
	}
}
4. Download the export result
Now that you have the export ID, you can make the following request to GET /Export/Result/{id}/ to get the file from the REST API. The following is an example of how to download the export file, and then save it to C:\Temp\file.pdf:
if (!string.IsNullOrEmpty(exportResultId))
{
	url = string.Format(
		CultureInfo.InvariantCulture,
		"{0}/API/Export/Result/{1}/?isDownloadLink={2}",
		baseUrl,
		exportResultId,
		false
	);
		
	using (var response = httpClient.GetAsync(url).Result)
	{
		if (response.StatusCode == HttpStatusCode.OK)
		{
			byte[] fileBytes = response.Content.ReadAsByteArrayAsync().Result;
				
			File.WriteAllBytes(@"C:\Temp\file.pdf", fileBytes);
		}
	}
}
5. Entire code
The following is the entire example together: the sample logs in, creates a PDF export for the view with ID e16138cd-b78f-4c43-9b2d-d0e68f427998, then the file is downloaded and saved:
using System.Net;
using System.Net.Http;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization;
using System.Globalization;
// ...
string baseUrl = "http://localhost:8010";
var cookieContainer = new CookieContainer();
string sessionId = string.Empty;
using (HttpClientHandler httpClientHandler = new HttpClientHandler())
{
    httpClientHandler.CookieContainer = cookieContainer;
	using (HttpClient httpClient = new HttpClient(httpClientHandler))
	{
		// Get Session ID
		string logonUri = string.Concat(baseUrl, "/Api/LogOn/");
			
		var logonOptions = new
		{
			accountName = "admin",
			password = "1234",
			cultureName = string.Empty,
			deleteOtherSessions = true,
			isWindowsLogOn = false
		};
	
		JavaScriptSerializer serializer = new JavaScriptSerializer();
		var requestBodyAsString = serializer.Serialize(logonOptions);
		StringContent content = new StringContent(
			requestBodyAsString,
			Encoding.UTF8,
			"application/json"
		);
			
		string jsonString = string.Empty;
	
		using (var response = httpClient.PostAsync(logonUri, content).Result)
		{
			jsonString = response.Content.ReadAsStringAsync().Result;
		}
	
		var obj = (Dictionary<string, object>)serializer.DeserializeObject(jsonString);
		
		sessionId = obj["sessionId"].ToString();
					
		string url = string.Format(
			CultureInfo.InvariantCulture,
			"{0}/API/Export/",
			baseUrl
		);
		
		var exportRequestOptions = new
		{
			__classType = "dundas.export.ExportRequest",
			isLegacyExport = true,
	
			// PDF Exporter
			providerId = "5752eb39-40b5-4d79-b96b-9f9297c67193",
			viewId = "e16138cd-b78f-4c43-9b2d-d0e68f427998"
		};
		
		requestBodyAsString = serializer.Serialize(exportRequestOptions);
		
		string exportResultId = string.Empty; 
		// Add an Authorization header (v10 and higher)
		httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", sessionId);
		
		// Define the request body
		HttpContent requestBody = null;
		requestBody = new StringContent(requestBodyAsString, Encoding.UTF8, "application/json");
		using (var response = httpClient.PostAsync(url, requestBody).Result)
		{
			if (response.StatusCode == HttpStatusCode.OK)
			{
				Console.WriteLine("Success");
		
				string jsonObject = response.Content.ReadAsStringAsync().Result;
				
				exportResultId = jsonObject.Trim('\"');
			}
		}
			
		if (!string.IsNullOrEmpty(exportResultId))
		{
			
		    url = string.Format(
				CultureInfo.InvariantCulture,
				"{0}/API/Export/Result/{1}/?isDownloadLink={2}",
				baseUrl,
				exportResultId,
				false
			);
					
				
					
			using (var response = httpClient.GetAsync(url).Result)
			{
				if (response.StatusCode == HttpStatusCode.OK)
				{
					byte[] fileBytes = response.Content.ReadAsByteArrayAsync().Result;
							
					File.WriteAllBytes(@"C:\Temp\file.pdf", fileBytes);
				}
			}		
		}
	}
}
6. See also
- REST API: /API/LogOn
 - REST API: /API/Export
 - REST API: /API/Export/Result
 - JavaScript API: ExportRequest Class
 - Script Library: Export
 - File and folder properties
 - Share or export your work