Как вернуть html-страницу из действия WebApi?
Я ищу пример 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");
}
Если я использую это неправильно, что лучший подход и вы можете указать мне пример?
WebApi 2 с .NET 4.52
Изменить: Хм, улучшил его, но вместо заголовка заголовка вернулся json header.
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"]}]}
Ответы
Ответ 1
Один из способов сделать это - прочитать страницу в виде строки, а затем отправить ее в ответ типа контента "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;
}
Ответ 2
Если это статический html файл (как он выглядит), просто используйте параметры статического ресурса. https://docs.asp.net/en/latest/fundamentals/static-files.html