我怎样才能渲染我保存的 html 文件而不是显示原始的 html?
How can I get my saved html file to be rendered rather than displaying the raw html?
我有 html 个文件保存在 Web API 应用程序的 App_Data 文件夹中。配套客户端 (Winforms) 应用程序发送一封带有 link 的电子邮件,允许用户单击 link 并在浏览器中查看这些 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 应用程序中的获取代码运行良好;这是单击 link 时调用的内容:
// 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,它就会出现。
我怎样才能确保 GET 方法返回的 HTML 按预期显示?
明确地说,我不希望用户看到这样的内容:
<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 是这样的:
您应该告诉浏览器您正在发送 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"
)
};
}
我有 html 个文件保存在 Web API 应用程序的 App_Data 文件夹中。配套客户端 (Winforms) 应用程序发送一封带有 link 的电子邮件,允许用户单击 link 并在浏览器中查看这些 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 应用程序中的获取代码运行良好;这是单击 link 时调用的内容:
// 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,它就会出现。
我怎样才能确保 GET 方法返回的 HTML 按预期显示?
明确地说,我不希望用户看到这样的内容:
<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 是这样的:
您应该告诉浏览器您正在发送 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"
)
};
}