For this example, set up a new .net core webapi sample project and replace the Program.cs contents with the below example.
Create the sample project
In CMD:
dotnet new webapi -o pruvanApiExample
Update the program file
Program.cs:
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Diagnostics;
using System.Text.Json;
namespace pruvanApiExample
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});
}
[ApiController]
[Route("/pruvan/std2/validate")]
[Produces("application/json")]
public class PruvanStd2ValidateController : ControllerBase
{
[HttpPost]
public static bool Validate(string username, string password) {
return true;
}
public IActionResult Post()
{
// Request.Form accesses the parsed multipart-formdata; key-value pairs and files
var form = Request.Form;
var username = "";
var password = "";
var payload = new Dictionary<string, object>();
var validated = false;
var response = new Dictionary<string, object>();
// Request.Form.Keys contains all form field-names in the multipart-formdata
foreach (var formKey in form.Keys)
{
Debug.Write(formKey + ": ");
Debug.WriteLine(form[formKey]);
}
payload = JsonSerializer.Deserialize<Dictionary<string, object>>(form["payload"]);
Debug.WriteLine("username: " + payload["username"]);
username = payload["username"].ToString();
password = payload["token"].ToString();
// validate username / password
validated = Validate(username, password);
if (validated) {
response["validated"] = true;
response["error"] = "";
} else {
response["validated"] = false;
response["error"] = "Invalid Username or Password";
}
return Ok(response);
}
}
[ApiController]
[Route("/pruvan/std2/uploadPictures")]
[Produces("application/json")]
public class PruvanStd2UploadPicturesController : ControllerBase
{
[HttpPost]
public async Task OnPostUploadAsync()
{
var form = Request.Form;
var filename = "";
var username = "";
var password = "";
var payload = new Dictionary<string, object>();
var response = new Dictionary<string, object>();
payload = JsonSerializer.Deserialize<Dictionary<string, object>>(form["payload"]);
Debug.WriteLine("failname: " + payload["fileName"]);
filename = payload["fileName"].ToString();
username = payload["username"].ToString();
password = payload["token"].ToString();
if (PruvanStd2ValidateController.Validate(username, password)) {
// Request.Form.Files contains all files in the multipart-formdata
foreach (var formFile in form.Files)
{
Debug.WriteLine("file " + formFile.Name + " found");
}
var file = form.Files["file"];
// This full directory structure needs to exist for a successful save
var savePath = "./uploads/" + filename;
using (var fileStream = new FileStream(savePath, FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
response["status"] = true;
response["error"] = null;
return Ok(response);
} else {
response["status"] = false;
response["error"] = "Invalid Username or Password";
return Ok(response);
}
}
}
[ApiController]
[Route("/pruvan/std2/getWorkOrders")]
[Produces("application/json")]
public class PruvanStd2GetWorkOrdersController : ControllerBase
{
[HttpPost]
public async Task OnPostUploadAsync()
{
var form = Request.Form;
var username = "";
var password = "";
var payload = new Dictionary<string, object>();
var response = new Dictionary<string, object>();
payload = JsonSerializer.Deserialize<Dictionary<string, object>>(form["payload"]);
Debug.WriteLine("username: " + payload["username"]);
username = payload["username"].ToString();
password = payload["token"].ToString();
if (PruvanStd2ValidateController.Validate(username, password)) {
var workOrders = new List<Dictionary<string, object>>();
// Get work orders from db async
/* var workOrder = new Dictionary<string, object>() {
{"workOrderNumber", "Simple"},
{"address1", "110 East Main Street"},
{"city", "Round Rock"},
{"state", "TX"},
{"zip", "78664"},
{"services", new List<Dictionary<string, object>>()
{new Dictionary<string, object>() {{"serviceName", "Task"}}}
}
};
workOrders.Add(workOrder); */
response["workOrders"] = workOrders;
response["error"] = "";
return Ok(response);
} else {
response["error"] = "Invalid Username or Password";
return Ok(response);
}
}
}
[ApiController]
[Route("/pruvan/std2/status")]
[Produces("application/json")]
public class PruvanStd2StatusController : ControllerBase
{
[HttpPost]
public IActionResult Post()
{
var form = Request.Form;
var username = "";
var password = "";
var payload = new Dictionary<string, object>();
var response = new Dictionary<string, object>();
payload = JsonSerializer.Deserialize<Dictionary<string, object>>(form["payload"]);
Debug.WriteLine("username: " + payload["username"]);
username = payload["username"].ToString();
password = payload["token"].ToString();
if (PruvanStd2ValidateController.Validate(username, password)) {
foreach (var workorder in (Dictionary<string, object>[]) payload["workOrders"]) {
// Update wo status in db
};
response["status"] = true;
response["error"] = null;
return Ok(response);
} else {
response["status"] = false;
response["error"] = "Invalid Username or Password";
return Ok(response);
}
}
}
}
Comments