如何从WebApi动作返回html页面?

时间:2016-06-29 16:29:03

标签: c# iis asp.net-web-api

我正在寻找一个WebApi示例,默认路由会将给定的html页面返回给调用者。我已经按照以下方式设置了路线和行动。我只想向他发送index.html页面,而不是重定向,因为他在正确的位置。

http://localhost/Site      // load index.html

// WebApiConfig.cs
config.Routes.MapHttpRoute(
    name: "Root",
    routeTemplate: "",
    defaults: new { controller = "Request", action = "Index" }
);

// RequestControlller.cs
    [HttpGet]
[ActionName("Index")]
public HttpResponseMessage Index()
{
    return Request.CreateResponse(HttpStatusCode.OK, "serve up index.html");
}

如果我使用了这个错误,那么更好的方法是什么,你能指点我一个例子吗?

使用.NET 4.52的WebApi 2

编辑:嗯,改进了它,但是取回了json标题而不是页面内容。

public HttpResponseMessage Index()
{
    var path = HttpContext.Current.Server.MapPath("~/index.html");
    var content = new StringContent(File.ReadAllText(path), Encoding.UTF8, "text/html");
    return Request.CreateResponse(HttpStatusCode.OK, content);
}

{"Headers":[{"Key":"Content-Type","Value":["text/html; charset=utf-8"]}]}

2 个答案:

答案 0 :(得分:36)

执行此操作的一种方法是将该页面作为字符串读取,然后将其发送到内容类型为“text / html”的响应中。

添加命名空间IO:

using System.IO;

在控制器中:

[HttpGet]
[ActionName("Index")]
public HttpResponseMessage Index()
{
    var path = "your path to index.html";
    var response = new HttpResponseMessage();
    response.Content =  new StringContent(File.ReadAllText(path));
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response;
}

答案 1 :(得分:2)

对于ASP.NET Core(不是ASP.NET Standard),如果它是一个静态html文件(看起来像),请使用静态资源选项:

Static files in ASP.NET Core