%CSP.Page - proper way to change ContentType to display text error or return expected pdf content
I want to create a CSP page that returns a pdf. The pdf is identified by a pdftoken parameter.
My goal is to validate the token and return the pdf (ContentType=”application/pdf”) if the token is good and return a text error message "Bad Token" (ContentType=”text/plain”) if the token is missing or bad.
My issue seems to be associated with ContentType. I can define one ContentType that works for the pdf or the error message. I am unable to change the ContentType.
Any assistance is appreciated.
ClassMethod OnPage() As %Status { set pdfToken=$get(%request.Data("pdfToken",1)) if pdfToken="" { set PDFError("ErrorCode")=400 set PDFError("ErrorText")="missing pdftoken" set %response.ContentType="text/plain" set %response.Status =”400 Bad Request” quit %response.Status }
//token passed – serve the pdf set %response.ContentType="application/pdf" set PDFFileName=$piece(^TokenData(pdfToken),"^",1) set stream=##class(%FileBinaryStream).%New() do stream.LinkToFile(PDFFileName) do stream.OutputToDevice() quit $$$OK }
Comments
David, you should set ContentType in OnPreHTTP method.
Thank you for the quick reply.
For Clarity....
I should create an OnPreHTTP( ) method that tests my parameter and set the ContentType accordingly.
Pseudo code...
OnPreHTTP() as %Boolean
{
set pdfToken=$get(%request.Data("pdfToken",1))
if (pdfToken is valid) set set %response.ContentType="application/pdf"
else set %response.ContentType="text/plain"
quit 1
}