logo

Возвращение HTML из контроллера ASP.NET Web API: решение

Быстрый ответ

ASP.NET Web API может возвращать HTML с помощью HttpResponseMessage с StringContent. Установите значение text/html для MediaTypeHeaderValue и браузер должен корректно отобразить полученный HTML. Ниже приведён пример кода:

csharp
Скопировать код
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, чтобы избежать дополнительной сериализации. Вот соответствующий пример кода:

csharp
Скопировать код
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, аналогично тому, как выбирается подходящий наряд для важного события. Пример:

csharp
Скопировать код
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 – это Повар (👨‍🍳), а клиенты – это Посетители ресторана (👩‍🍳).

Посетители (👩‍🍳) заказывают особое блюдо — веб-страницу (🌐).

Повар (👨‍🍳) готовит и подаёт блюдо:

csharp
Скопировать код
[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, решения должны быть согласованы для удобного перехода между версиями. Придерживайтесь методов, способствующих плавной миграции.

Полезные материалы

  1. Согласованность содержимого в ASP.NET Web API – Обзор методов предоставления ответов в различных форматах, включая HTML.
  2. Размещение ASP.NET Core на Windows с IIS – Детальное руководство по развертыванию ASP.NET Web API на серверах IIS.
  3. Результаты действий в Web API 2 – Обзор основных типов результатов действий и форматов ответов.
  4. Как разобрать JSON без библиотеки JSON.NET? – Несмотря на название вопроса, здесь показано, как настроить HTML-форматировщики, что актуально при возврате HTML.