DEV Community

catrina
catrina

Posted on • Originally published at catrina.me on

ASP.NET Core with PayTrace (Mime Type Fix)

This year I am re-writing my previous payment solution (from PHP to .NET) and first on the project list is credit cards. We are using PayTrace and their client-side encryption as to not have to worry about PCI Compliance.

File Not Found

I'd gotten to the point where I had:

  • a Pre-Payment model with all the fields needed to send via JSON
  • method to request a token for sending (uses demo username and pass)
  • a JS file to help scan credit cards using a USB device
  • a test PEM file I downloaded from the PayTrace site
  • PayTrace's third party JS library to encrypt card information and attach on form post

I load it all, scan card, hit submit, and I get this:

XML Parsing Error: no element found
Enter fullscreen mode Exit fullscreen mode

This is appearing in the console of Inspector in Firefox. Turns out this a generic error Firefox throws out when it’s expecting a file but gets nothing.

My path’s are correct, but the “public_key.pem” file is not attaching to my post. The problem? MIME-type.

Making It Work

First, in Startup.cs, I needed to do this to add the MIME-type:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings[".pem"] = "application/x-pem-file";
Enter fullscreen mode Exit fullscreen mode

in the same function add this:

app.UseStaticFiles(); // For the wwwroot folder
app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot", "api-keys")),
    RequestPath = new PathString("/api-keys"),
    ContentTypeProvider = provider
});
Enter fullscreen mode Exit fullscreen mode

Do NOT forget app.UseStaticFiles(); for your general wwwroot folder.

I dropped public_keys.pem in “api-keys” and done!

There seems something a bit off in this, so please correct me if you find it, but it's working for now!

Top comments (0)