2012-05-31 11 views
29

Tengo un caso especializado en el que deseo servir un archivo html directo de una Acción de controlador.Cómo servir el archivo html desde otro directorio como ActionResult

Quiero publicarlo desde una carpeta diferente a la carpeta Vistas. El archivo se encuentra en

Solution\Html\index.htm 

Y quiero servirlo desde una acción de controlador estándar. ¿Puedo usar el archivo de devolución? Y ¿cómo hago esto?

Respuesta

33

Si desea procesar este archivo index.htm en el navegador, entonces podría crear acción del controlador de esta manera:

public void GetHtml() 
{ 
    var encoding = new System.Text.UTF8Encoding(); 
    var htm = System.IO.File.ReadAllText(Server.MapPath("/Solution/Html/") + "index.htm", encoding); 
    byte[] data = encoding.GetBytes(htm); 
    Response.OutputStream.Write(data, 0, data.Length); 
    Response.OutputStream.Flush(); 
} 

o simplemente por:

public ActionResult GetHtml() 
{ 
    return File(Server.MapPath("/Solution/Html/") + "index.htm", "text/html"); 
} 

lo que permite decir esta acción es en controlador principal y algunos http://yoursite.com/Home/GetHtml usuario pulsa entonces index.htm se representará.

EDIT: 2 otros métodos

Si desea ver el HTML puro de index.htm en el navegador:

public ActionResult GetHtml() 
{ 
    Response.AddHeader("Content-Disposition", new System.Net.Mime.ContentDisposition { Inline = true, FileName = "index.htm"}.ToString()); 
    return File(Server.MapPath("/Solution/Html/") + "index.htm", "text/plain"); 
} 

Si lo que desea es descargar el archivo:

public FilePathResult GetHtml() 
{ 
    return File(Server.MapPath("/Solution/Html/") + "index.htm", "text/html", "index.htm"); 
} 
+0

'Server.MapPath' no es necesario. simplemente intente 'return File (" ~/Html/index.htm "," text/html ");' –

+1

¿Qué biblioteca necesita usar para usar 'File()'? –

0

¿Puedes leer el archivo html en una cadena y devolverlo en acción? Se representa como página HTML como se muestra a continuación:? Archivo

public string GetHtmlFile(string file) 
{ 
    file = Server.MapPath("~/" + file); 
    StreamReader streamReader = new StreamReader(file); 
    string text = streamReader.ReadToEnd(); 
    streamReader.Close(); 
    return text; 
} 

Inicio/GetHtmlFile = Solución \ html \ index.htm

Si el mecanismo de destino o el almacenamiento de archivos HTML es complicado, entonces puede que Virtual path provider

Virtual path provider MVC sample

38

Mira esto:

public ActionResult Index() 
    { 
     return new FilePathResult("~/Html/index.htm", "text/html"); 
    } 
+3

mejor anwer.Works perfectamente – om471987

+0

De nada mi amigo :) –

+1

'return File (" ~/Html/index.htm "," text/html ");' es la respuesta más corta; D –

7

extendí la respuesta de wahid para crear HtmlResult

crear HTML Resultado que se extiende FilePathResult

public class HtmlResult : FilePathResult 
{ 
    public HtmlResult(string path) 
     : base(path, "text/html") 
    { 
    } 
} 

método estático Creado el controlador

public static HtmlResult Html(this Controller controller, string path) 
{ 
    return new HtmlResult(path); 
} 

utilizado como volvemos la vista

public HtmlResult Index() 
{ 
    return this.Html("~/Index.html"); 
} 

Espero que ayude

+0

preciosa .........-> –

0

Quiero poner mis dos centavos en.He encontrado esto muy escueto y ya está allí:

public ActionResult Index() 
{ 
    var encoding = new System.Text.UTF8Encoding(); 
    var html = ""; //get it from file, from blob or whatever 
    return this.Content(html, "text/html; charset=utf-8"); 
} 
Cuestiones relacionadas