ASP.NET MVC: returning plaintext file to download from controller method

Consider the need to return a plain-text file from a controller method back to the caller. The idea is to have the file downloaded, rather than viewed as plaintext in the browser.

I have the following method, and it works as expected. The file is presented to the browser for download, and the file is populated with the string.

I'd like to look for a 'more correct' implementation of this method, as I am not 100% comfortable with the void return type.

public void ViewHL7(int id)
{
    string someLongTextForDownload = "ABC123";

    Response.Clear(); 
    Response.ContentType = "text/plain";
    Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.hl7", id.ToString()));
    Response.Write(someLongTextForDownload);
    Response.End();
}

Answers


Use the File method on the controller class to return a FileResult

public ActionResult ViewHL7( int id )
{
    ...

    return File( Encoding.UTF8.GetBytes( someLongTextForDownLoad ),
                 "text/plain",
                  string.Format( "{0}.hl7", id ) );
}

You'll want to return a FileContentResult from your method.


Need Your Help

Seeing black bars at the top and bottom of the iPhone X Simulator

ios uinavigationbar ios-simulator xcode9 iphone-x

Running my App in the iPhone X Simulator (GM Seed) I am noticing two strange effects:

WebView loadUrl works only once

android webview webviewclient

EDIT: I worked on this project years ago and unfortunately I cannot verify if any of the answers is working in the given scenario.