I looked into the implementation of standard method (thanks to the Resharper’s decompiler):
return Ok("Message");
It basically creates new OkObjectResult, providing the value (“Message”) to its constructor, and returns that object. In its turn, OkObjectResult is just a derivative from ObjectResult, it has it’s own field with default status code (200), retranslates put into its constructor argument (message, or whatever the object you gave) to base constructor (ObjectResult), and assigns value from it’s private constant field to base class’s property StatusCode, so it’s basically kind of a wrapper for ObjectResult.
So, what is the conclusion one can make from all of this: we can return status code with the message in similar fashion using base ObjectResult class:
return new ObjectResult("Your message") {StatusCode = 403};