Возвращение HTML из контроллера ASP.NET Web API: решение
Быстрый ответ
ASP.NET Web API может возвращать HTML с помощью HttpResponseMessage с StringContent. Установите значение text/html
для MediaTypeHeaderValue и браузер должен корректно отобразить полученный HTML. Ниже приведён пример кода:
public HttpResponseMessage GetHtml()
{
var html = "<html><body><h1>Добро пожаловать!</h1></body></html>";
return new HttpResponseMessage()
{
Content = new StringContent(html, Encoding.UTF8, "text/html")
};
}
Клиент получит HTML, который сразу будет готов к отображению.
Адаптирование ответов для Legacy ASP.NET MVC Web API и ASP.NET Core
Подача контента в ASP.NET Core
В ASP.NET Core процесс отдачи HTML-ответов упрощён благодаря ContentResult. Установите значение text/html
для свойства ContentType
, чтобы избежать дополнительной сериализации. Вот соответствующий пример кода:
public ContentResult GetHtmlCore()
{
var htmlContent = "<html><body><h1>Привет, ASP.NET Core!</h1></body></html>";
return new ContentResult
{
Content = htmlContent,
ContentType = "text/html",
StatusCode = (int)HttpStatusCode.OK
};
}
Встроенный метод Content в контроллерах позволяет напрямую отправлять HTML.
Вставка HTML в Legacy ASP.NET MVC Web API
В более старых версиях ASP.NET Web API нужно с особой осмотрительностью вставлять HTML в Content объекта HttpResponseMessage. Очень важно определить соответствующий MediaTypeHeaderValue, аналогично тому, как выбирается подходящий наряд для важного события. Пример:
public HttpResponseMessage GetHtmlLegacy()
{
var htmlContent = "<html><body><h1>Добро пожаловать в устаревший ASP.NET!</h1></body></html>";
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(htmlContent, Encoding.UTF8, "text/html")
};
return response;
}
Визуализация
Допустим, ваш Web API – это Повар (👨🍳
), а клиенты – это Посетители ресторана (👩🍳
).
Посетители (👩🍳
) заказывают особое блюдо — веб-страницу (🌐
).
Повар (👨🍳
) готовит и подаёт блюдо:
[HttpGet]
public HttpResponseMessage GetWebPage()
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent("<html>🌐</html>", Encoding.UTF8, "text/html");
return response;
}
И вот перед посетителями — тарелка (🍽️
) с аппетитным HTML-блюдом.
👨🍳: "Приятного аппетита! Наслаждайтесь этим изысканным веб-блюдом, приготовленным для немедленного потребления!"
Основные моменты:
- Повар (Web API) тщательно приготовил запрошенный HTML (
🌐
) для посетителей (клиентов). - HTML подаётся на тарелке (
🍽️
), что символизирует корректную отдачу с правильнымContentType
.
Суть в том, что ASP.NET Web API идеально подготовит и подаст HTML клиенту.
Выбор подходящего контента
HttpResponseMessage versus ContentResult
Если HttpResponseMessage является классическим выбором для Web API, то ContentResult предлагает более удобный способ в ASP.NET Core 2.0. Поэтому выбор зависит от ваших целей и предпочтений.
Сопоставление содержимого и сериализация
ContentResult помогает избегать стандартного процесса сериализации, повышая производительность, особенно при возврате чистого HTML или текста.
Определение типа медиа
Важно указать корректный медиа тип, чтобы клиент смог правильно обработать HTML-контент как веб-страницу. Для таких случаев установите text/html
.
Будьте осторожны и придерживайтесь лучших практик
Важность кодировки
Используйте кодировку UTF-8 для StringContent для предотвращения проблем с отображением и безопасностью данных.
Управление статус-кодами
Разумно относитесь к StatusCode. Правильный статус-код вместе с HTML позволит клиенту полностью понять результат запроса.
Вопросы совместимости
Независимо от того, работаете ли вы с наследуемым Web API или с ASP.NET Core, решения должны быть согласованы для удобного перехода между версиями. Придерживайтесь методов, способствующих плавной миграции.
Полезные материалы
- Согласованность содержимого в ASP.NET Web API – Обзор методов предоставления ответов в различных форматах, включая HTML.
- Размещение ASP.NET Core на Windows с IIS – Детальное руководство по развертыванию ASP.NET Web API на серверах IIS.
- Результаты действий в Web API 2 – Обзор основных типов результатов действий и форматов ответов.
- Как разобрать JSON без библиотеки JSON.NET? – Несмотря на название вопроса, здесь показано, как настроить HTML-форматировщики, что актуально при возврате HTML.