2016-01-04 2 views
1

У меня есть html-файлы, сохраненные в папке App_Data приложения Web API. Клиент компаньона (Winforms) приложение отправляет письмо со ссылкой, которая позволяет пользователю нажать эту ссылку и просмотреть этот HTML файлы в браузере, как так:Как я могу получить сохраненный html-файл, а не отображать необработанный html?

// Client Winforms app code 
internal static bool EmailGeneratedReports(string emailAddr) 
{ 
    bool success = true; 
    try 
    { 
     Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 
     MailItem mailItem = app.CreateItem(OlItemType.olMailItem); 
     mailItem.Subject = String.Format("duckbillP Reports generated {0}", GetYYYYMMDDHHMM()); 
     mailItem.To = emailAddr; 
     string rptLinks = String.Format("<a href=\"{0}/api/{1}/{2}/{3}\" target=\"_blank\">Price Compliance Report Online</a>", ReportRunnerConstsAndUtils.SERVER_BASE_ADDRESS, "Platypus", "gramps", "201507"); // hardcoding year and month for now 
     mailItem.HTMLBody = String.Format("<html><body><p>Your duckbillP reports are attached. You can also view them online here:</p>{0}</body></html>", rptLinks); 
     FileInfo[] rptsToEmail = GetLastReportsGenerated(); 
     foreach (var file in rptsToEmail) 
     { 
      mailItem.Attachments.Add(String.Format("{0}\\{1}", uniqueFolder, file.Name));     
     } 
     mailItem.Importance = OlImportance.olImportanceHigh; 
     mailItem.Display(false); 
    } 
    catch (System.Exception sysex) 
    { 
     String sysexDetail = String.Format(ReportRunnerConstsAndUtils.ExceptionFormatString, sysex.Message, 
      Environment.NewLine, sysex.Source, sysex.StackTrace); 
     MessageBox.Show(sysexDetail); 
     success = false; 
    } 
    return success; 
} 

Получить код в приложении Web API работает просто отлично ; это то, что называется, когда нажата ссылка:

// Web API (server) Controller code 
[Route("{unit}/{begindate}")] 
public string Get(string unit, string begindate) 
{ 
    string _unit = unit; 
    string _begindate = String.Format("{0}01", PlatypusWebReportsConstsAndUtils.HyphenizeYYYYMM(begindate)); 
    string appDataFolder = HttpContext.Current.Server.MapPath("~/App_Data/"); 

    string htmlSummaryFilename = string.Format("platypusSummary_{0}_{1}.html", _unit, _begindate); 
    string fullSummaryPath = Path.Combine(appDataFolder, htmlSummaryFilename); 

    string htmlDetailFilename = string.Format("platypusDetail_{0}_{1}.html", _unit, _begindate); 
    string fullDetailPath = Path.Combine(appDataFolder, htmlDetailFilename); 

    String summaryHtmlFromFile = File.ReadAllText(fullSummaryPath); 
    String detailHtmlFromFile = File.ReadAllText(fullDetailPath); 
    return String.Format("{0}<br/><br/>{1}", summaryHtmlFromFile, detailHtmlFromFile); 
} 

Я надеялся, что HTML вернулся бы сделать в браузере в обычном порядке, но вместо этого он просто отображает необработанный HTML (включая все под углом скобки и ключевые слова html и т. д.). IOW, это появляется, если я просматриваю HTML в Блокноте, а не в браузере.

Как я могу видеть, что HTML, возвращаемый методом GET, отображается так, как предполагалось?

Чтобы быть совершенно ясно, я не хочу, чтобы пользователь видел вещи, как это:

<h1>This is heading 1 (Candara)</h1> 
<h2>This is heading 2 (Georgia)</h2> 
<h3>This is heading 3 (Tahoma)</h3> 
<p class="candara">This is a Candara 1.1em paragraph</p> 
<p class="segoe">This is a Segoe UI paragraph</p> 
<p class="tahoma">This is a Tahoma paragraph</p> 
<p class="georgia">This is a Georgia 1.1em paragraph</p> 

... а тонированное HTML, как это:

enter image description here

ответ

2

You должен сообщить браузеру, что вы отправляете содержимое HTML. Что-то вроде этого должно работать:

// Send an HTTP message instead of a string. 
public HttpResponseMessage Get(string unit, string begindate) 
{ 
    // Here you process the data... 

    return new HttpResponseMessage() 
    { 
     Content = new StringContent(
      String.Format("{0}<br/><br/>{1}", summaryHtmlFromFile, detailHtmlFromFile), 
      Encoding.UTF8, 
      "text/html" 
     ) 
    }; 
} 
Смежные вопросы