C#でのログイン認証の裏で HTML を PDF に変換する
C#でログイン認証の背後でHTMLをPDFに変換するには、IronPDFのHttpClientでHTMLをダウンロードします。 このアプローチでは、ネットワーク認証とHTMLフォームログインの両方を効果的に処理します。
IronPDFのAPIを使用してログインフォームの背後にあるHTMLページをPDFに変換します。 このガイドは、認証と保護されたコンテンツの取得のためのChromeHttpLoginCredentialsを示しています。 ネットワーク認証とHTMLフォームログインの両方を、わかりやすいコード例で扱います。
-
1Install IronPDF with NuGet Package Manager
-
2このコード スニペットをコピーして実行します。
new ChromePdfRenderer { LoginCredentials = new ChromeHttpLoginCredentials("username","password") } .RenderUrlAsPdf("https://example.com/protected") .SaveAs("secure.pdf");C# -
3実際の環境でテストするためにデプロイする
今日プロジェクトで IronPDF を使い始めましょう無料トライアル
最小限のワークフロー(5ステップ)
- C#IronPDFライブラリをダウンロードする。
- HTMLをダウンロードしてログインを回避
- LoginCredentialsプロパティでネットワーク認証を使用してログインする
- 認証用にHTMLフォームを使用
- MVCログイン認証の回避策
ログイン認証を処理するためのベストプラクティスは何ですか?
IronPDFはChromeHttpLoginCredentials APIを通してTLSネットワーク認証(ユーザー名とパスワード)をサポートしています。 さまざまなログインシナリオに関する包括的なガイダンスについては、TLS Website & System Logins tutorial を参照してください。
推奨される方法は、HttpClientを使用してHTMLとアセットをダウンロードすることです。 この方法では、ヘッダー、ログイン、その他の要件をサポートします。 メモリやディスクにダウンロードした後、IronPDFはHTMLをPDFに変換します。 System.Net.WebClientでダウンロードします。
// Your authentication token
string accessToken = "your-access-token";
// Download HTML content from a URL with authentication
using (WebClient client = new WebClient())
{
// Add authentication headers if needed
client.Headers.Add("Authorization", "Bearer " + accessToken);
// Download the HTML string
string html = client.DownloadString("http://www.example.com/protected-content");
// Load the HTML into an HtmlDocument for parsing
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
// Extract all image sources for downloading
foreach(HtmlNode img in doc.DocumentNode.SelectNodes("//img"))
{
string imgSrc = img.GetAttributeValue("src", null);
Console.WriteLine($"Found image: {imgSrc}");
// Download each image asset
if (!string.IsNullOrEmpty(imgSrc))
{
string fileName = Path.GetFileName(imgSrc);
client.DownloadFile(imgSrc, fileName);
}
}
// Convert the downloaded HTML to PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("authenticated-content.pdf");
}
System.Uriコンストラクタを使用します。 HTMLドキュメント内のすべての相対パスをリベースするには、HtmlAgilityPackを使用してヘッダーに<base>タグを追加します。 例. URL とアセットの処理の詳細については、"ベース URL とアセットのエンコード ガイド"を参照してください。なぜ HTML コンテンツを最初にダウンロードする必要があるのですか?
変換前にHTMLコンテンツをダウンロードすることで、いくつかの利点が得られます:
- 完全な制御: HTMLを修正し、壊れたリンクを修正するか、変換前に認証トークンを挿入
- アセット管理: 画像、CSS、JavaScriptファイルのような外部リソースをダウンロードしキャッシュ
- 認証の柔軟性: OAuth、JWTトークン、カスタムヘッダーを含む任意 for .NET認証メカニズムを使用
- パフォーマンス: 頻繁にアクセスするコンテンツをキャッシュしてサーバーロードを削減
- デバッグ: トラブルシューティングのために変換される正確なHTMLを検査
Cookieとセッションを含む複雑な認証シナリオについては、PDF変換中の認証状態管理について説明したCookieガイドを参照してください。
画像やスタイルシートなどのアセットはどのように扱えばよいですか?
認証されたページを変換する場合、外部アセットも同じ認証を必要とすることがよくあります。 ここにHttpClientを使用した包括的なアプローチがあります。
public async Task<string> DownloadAuthenticatedHtmlWithAssets(string url, string authToken)
{
using (var client = new HttpClient())
{
// Set authentication header
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authToken);
// Download the main HTML
string html = await client.GetStringAsync(url);
// Parse HTML to find assets
var doc = new HtmlDocument();
doc.LoadHtml(html);
// Create a base URI for resolving relative paths
var baseUri = new Uri(url);
// Download CSS files
var cssLinks = doc.DocumentNode.SelectNodes("//link[@rel='stylesheet']");
if (cssLinks != null)
{
foreach (var link in cssLinks)
{
string href = link.GetAttributeValue("href", "");
if (!string.IsNullOrEmpty(href))
{
var cssUri = new Uri(baseUri, href);
string cssContent = await client.GetStringAsync(cssUri);
// Embed CSS directly in the HTML
var styleNode = doc.CreateElement("style");
styleNode.InnerHtml = cssContent;
doc.DocumentNode.SelectSingleNode("//head").AppendChild(styleNode);
// Remove the external link
link.Remove();
}
}
}
// Return the modified HTML with embedded assets
return doc.DocumentNode.OuterHtml;
}
}Public Async Function DownloadAuthenticatedHtmlWithAssets(url As String, authToken As String) As Task(Of String)
Using client As New HttpClient()
' Set authentication header
client.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authToken)
' Download the main HTML
Dim html As String = Await client.GetStringAsync(url)
' Parse HTML to find assets
Dim doc As New HtmlDocument()
doc.LoadHtml(html)
' Create a base URI for resolving relative paths
Dim baseUri As New Uri(url)
' Download CSS files
Dim cssLinks = doc.DocumentNode.SelectNodes("//link[@rel='stylesheet']")
If cssLinks IsNot Nothing Then
For Each link In cssLinks
Dim href As String = link.GetAttributeValue("href", "")
If Not String.IsNullOrEmpty(href) Then
Dim cssUri As New Uri(baseUri, href)
Dim cssContent As String = Await client.GetStringAsync(cssUri)
' Embed CSS directly in the HTML
Dim styleNode = doc.CreateElement("style")
styleNode.InnerHtml = cssContent
doc.DocumentNode.SelectSingleNode("//head").AppendChild(styleNode)
' Remove the external link
link.Remove()
End If
Next
End If
' Return the modified HTML with embedded assets
Return doc.DocumentNode.OuterHtml
End Using
End FunctionHTML解析に役立つツールは何ですか?
HtmlAgilityPackは.NETの最も人気のあるHTMLパーシングライブラリですが、代替手段も存在します。
- HtmlAgilityPack: 一般的なHTML解析と操作に最適
- AngleSharp: 現代的で標準準拠のHTMLパーサで、CSSセレクタサポートあり
- CsQuery: jQueryに精通したC#開発者向けのjQueryのような構文 4.正規表現:単純な抽出作業用(複雑なHTMLにはお勧めしません)
ChromeHttpLoginCredentials
ネットワーク認証を使用してログインするにはどうすればよいですか?
ほとんどのASP.NETアプリケーションはネットワーク認証をサポートしており、HTMLフォームの投稿よりも信頼性があります。 IronPDFはChromeHttpLoginCredentialsクラスを通じて基本、ダイジェスト、NTLM認証のための組み込みサポートを提供します。 その他のヘッダーのカスタマイズについては、HTTP リクエストヘッダーガイドを参照してください。
using IronPdf;
using System;
ChromePdfRenderer renderer = new ChromePdfRenderer
{
// setting login credentials to bypass basic authentication
LoginCredentials = new ChromeHttpLoginCredentials()
{
NetworkUsername = "testUser",
NetworkPassword = "testPassword"
}
};
var uri = new Uri("http://localhost:51169/Invoice");
// Render web URL to PDF
PdfDocument pdf = renderer.RenderUrlAsPdf(uri);
// Export PDF
pdf.SaveAs("UrlToPdfExample.Pdf");Imports IronPdf
Imports System
Private renderer As New ChromePdfRenderer With {
.LoginCredentials = New ChromeHttpLoginCredentials() With {
.NetworkUsername = "testUser",
.NetworkPassword = "testPassword"
}
}
Private uri = New Uri("http://localhost:51169/Invoice")
' Render web URL to PDF
Private pdf As PdfDocument = renderer.RenderUrlAsPdf(uri)
' Export PDF
pdf.SaveAs("UrlToPdfExample.Pdf")なぜネットワーク認証はフォーム投稿よりも信頼できるのですか
ネットワーク認証は、HTMLフォーム投稿に比べていくつかの利点があります:
- 標準化されたプロトコル: RFC標準に従ったHTTP認証ヘッダーを使用
- ブラウザ統合: Chromeレンダリングエンジンがシームレスに認証を処理
- セッション管理: 認証チャレンジとセッション永続化を自動で処理
- セキュリティ: 認証情報をフォームデータではなくヘッダーを介して安全に送信
- 互換性: ほとんどの企業認証システム(
Active Directory,LDAP)と互換性があります。
ネットワーク認証にはどのような認証情報が必要ですか?
認証の種類によって、必要な認証情報は異なります:
// Basic Authentication (most common)
var basicAuth = new ChromeHttpLoginCredentials
{
NetworkUsername = "user@domain.com",
NetworkPassword = "password123"
};
// NTLM/Windows Authentication
var ntlmAuth = new ChromeHttpLoginCredentials
{
NetworkUsername = "DOMAIN\\username", // Include domain
NetworkPassword = "password123"
};
// Custom authentication headers
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HttpRequestHeaders = new Dictionary<string, string>
{
{ "X-API-Key", "your-api-key" },
{ "Authorization", "Bearer " + jwtToken }
};
認証失敗のトラブルシューティングはどうすればよいですか?
よくある認証の問題と解決策
- 401 Unauthorized: 認証情報と認証タイプを確認
- 403 Forbidden: ユーザーが認証されているが権限が不足
- タイムアウトエラー: 遅い認証システムのために
Timeoutを増やします - 証明書エラー: 適切にTLS / SSL設定を構成
問題を診断するためのデバッグを可能にします:
// Enable detailed logging
IronPdf.Logging.Logger.EnableDebugging = true;
IronPdf.Logging.Logger.LogFilePath = "IronPdf.log";
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Test authentication
try
{
var pdf = renderer.RenderUrlAsPdf("https://secure.example.com");
pdf.SaveAs("authenticated.pdf");
}
catch (Exception ex)
{
Console.WriteLine($"Authentication failed: {ex.Message}");
// Check IronPdf.log for detailed error information
}Imports IronPdf
Imports System
' Enable detailed logging
Logging.Logger.EnableDebugging = True
Logging.Logger.LogFilePath = "IronPdf.log"
Logging.Logger.LoggingMode = Logging.Logger.LoggingModes.All
' Test authentication
Try
Dim pdf = renderer.RenderUrlAsPdf("https://secure.example.com")
pdf.SaveAs("authenticated.pdf")
Catch ex As Exception
Console.WriteLine($"Authentication failed: {ex.Message}")
' Check IronPdf.log for detailed error information
End TryHTMLフォームを使ってログインするには?
HTMLフォームにデータを送信してログインするには、ChromeHttpLoginCredentialsクラスを使用してください。 IronPDFのChromeHttpLoginCredentials APIを参照。
これらの点を考慮してください:
- HTMLフォームのACTION属性で指定されたURLにログインデータを投稿します。 これを
LoginFormUrl属性として設定します。 これは、PDFとしてレンダリングしたいURLとは異なる場合があります。 - HTMLフォームのすべての入力とテキストエリアを表すデータを送信します。 name属性は、各変数名を定義します(idではありません)。
- 一部のウェブサイトでは、機械によるログインを積極的に防止しています。
// Configure form-based login
var formLogin = new ChromeHttpLoginCredentials
{
LoginFormUrl = "https://example.com/login",
LoginFormData = new Dictionary<string, string>
{
{"username", "user@example.com"},
{"password", "securePassword123"},
{"rememberMe", "true"},
{"csrf_token", "abc123"} // Include any hidden fields
}
};
var renderer = new ChromePdfRenderer
{
LoginCredentials = formLogin,
RenderingOptions = new ChromePdfRenderOptions
{
RenderDelay = 3000, // Allow time for login redirect
EnableJavaScript = true
}
};
// The actual page you want to convert (after login)
var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard");
pdf.SaveAs("dashboard.pdf");Imports System.Collections.Generic
' Configure form-based login
Dim formLogin As New ChromeHttpLoginCredentials With {
.LoginFormUrl = "https://example.com/login",
.LoginFormData = New Dictionary(Of String, String) From {
{"username", "user@example.com"},
{"password", "securePassword123"},
{"rememberMe", "true"},
{"csrf_token", "abc123"} ' Include any hidden fields
}
}
Dim renderer As New ChromePdfRenderer With {
.LoginCredentials = formLogin,
.RenderingOptions = New ChromePdfRenderOptions With {
.RenderDelay = 3000, ' Allow time for login redirect
.EnableJavaScript = True
}
}
' The actual page you want to convert (after login)
Dim pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard")
pdf.SaveAs("dashboard.pdf")どのようなフォームデータを取得する必要がありますか?
HTMLフォームによる認証を成功させるには、すべてのフォーム入力をキャプチャする必要があります:
// Use this helper method to extract form fields
public Dictionary<string, string> ExtractFormFields(string loginPageHtml)
{
var formData = new Dictionary<string, string>();
var doc = new HtmlDocument();
doc.LoadHtml(loginPageHtml);
// Find all input fields
var inputs = doc.DocumentNode.SelectNodes("//input");
if (inputs != null)
{
foreach (var input in inputs)
{
string name = input.GetAttributeValue("name", "");
string value = input.GetAttributeValue("value", "");
string type = input.GetAttributeValue("type", "text");
if (!string.IsNullOrEmpty(name))
{
// Handle different input types
switch (type.ToLower())
{
case "checkbox":
if (input.Attributes["checked"] != null)
formData[name] = "on";
break;
case "radio":
if (input.Attributes["checked"] != null)
formData[name] = value;
break;
default:
formData[name] = value;
break;
}
}
}
}
// Don't forget select elements
var selects = doc.DocumentNode.SelectNodes("//select");
if (selects != null)
{
foreach (var select in selects)
{
string name = select.GetAttributeValue("name", "");
var selected = select.SelectSingleNode(".//option[@selected]");
if (selected != null && !string.IsNullOrEmpty(name))
{
formData[name] = selected.GetAttributeValue("value", "");
}
}
}
return formData;
}' Use this helper method to extract form fields
Public Function ExtractFormFields(loginPageHtml As String) As Dictionary(Of String, String)
Dim formData As New Dictionary(Of String, String)()
Dim doc As New HtmlDocument()
doc.LoadHtml(loginPageHtml)
' Find all input fields
Dim inputs = doc.DocumentNode.SelectNodes("//input")
If inputs IsNot Nothing Then
For Each input In inputs
Dim name As String = input.GetAttributeValue("name", "")
Dim value As String = input.GetAttributeValue("value", "")
Dim type As String = input.GetAttributeValue("type", "text")
If Not String.IsNullOrEmpty(name) Then
' Handle different input types
Select Case type.ToLower()
Case "checkbox"
If input.Attributes("checked") IsNot Nothing Then
formData(name) = "on"
End If
Case "radio"
If input.Attributes("checked") IsNot Nothing Then
formData(name) = value
End If
Case Else
formData(name) = value
End Select
End If
Next
End If
' Don't forget select elements
Dim selects = doc.DocumentNode.SelectNodes("//select")
If selects IsNot Nothing Then
For Each selectNode In selects
Dim name As String = selectNode.GetAttributeValue("name", "")
Dim selected = selectNode.SelectSingleNode(".//option[@selected]")
If selected IsNot Nothing AndAlso Not String.IsNullOrEmpty(name) Then
formData(name) = selected.GetAttributeValue("value", "")
End If
Next
End If
Return formData
End Function正しいフォームアクションの URL を見つけるにはどうすればよいですか?
フォームのアクションURLは、認証を成功させるために重要です:
public string ExtractFormAction(string loginPageUrl, string loginPageHtml)
{
var doc = new HtmlDocument();
doc.LoadHtml(loginPageHtml);
// Find the login form
var form = doc.DocumentNode.SelectSingleNode("//form[contains(@action, 'login') or contains(@id, 'login') or contains(@class, 'login')]");
if (form == null)
{
// Try finding any form with password field
form = doc.DocumentNode.SelectSingleNode("//form[.//input[@type='password']]");
}
if (form != null)
{
string action = form.GetAttributeValue("action", "");
// Resolve relative URLs
if (!string.IsNullOrEmpty(action))
{
var baseUri = new Uri(loginPageUrl);
var actionUri = new Uri(baseUri, action);
return actionUri.ToString();
}
}
// Default to the login page URL if no action found
return loginPageUrl;
}Public Function ExtractFormAction(loginPageUrl As String, loginPageHtml As String) As String
Dim doc As New HtmlDocument()
doc.LoadHtml(loginPageHtml)
' Find the login form
Dim form As HtmlNode = doc.DocumentNode.SelectSingleNode("//form[contains(@action, 'login') or contains(@id, 'login') or contains(@class, 'login')]")
If form Is Nothing Then
' Try finding any form with password field
form = doc.DocumentNode.SelectSingleNode("//form[.//input[@type='password']]")
End If
If form IsNot Nothing Then
Dim action As String = form.GetAttributeValue("action", "")
' Resolve relative URLs
If Not String.IsNullOrEmpty(action) Then
Dim baseUri As New Uri(loginPageUrl)
Dim actionUri As New Uri(baseUri, action)
Return actionUri.ToString()
End If
End If
' Default to the login page URL if no action found
Return loginPageUrl
End Functionフォームベースの認証でよくある問題とは
- CSRFトークン: 多くのフォームが有効期限切れの偽造防止トークンを含む
- JavaScript検証: 一部のフォームはJavaScriptの実行を要求
- マルチステップ認証: 複数ページを要するフォーム
- CAPTCHA保護: 人間の確認チャレンジ 5.セッションタイムアウト:すぐに期限切れになるログインセッション
ViewBag
TempData
Html
複雑な認証シナリオを含む包括的なHTMLからPDFへの変換ガイダンスについては、HTML to PDFチュートリアルをご覧ください。
どのように MVC 認証を処理しますか?
次の回避策は、.NET MVCビューをプログラムで文字列にレンダリングし、ビューを忠実にレンダリングしながらMVCログインを回避します。 このアプローチは、CSHTML to PDF in MVC CoreやMVC Frameworkを変換するときに効果的です。
// Converts an MVC partial view to a string
public static string RenderPartialViewToString(this Controller controller, string viewPath, object model = null)
{
try
{
// Set the model
var context = controller.ControllerContext;
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
// Find the partial view
var viewResult = ViewEngines.Engines.FindPartialView(context, viewPath);
if (viewResult.View == null)
{
throw new Exception($"Partial view {viewPath} could not be found.");
}
// Create a view context
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
// Render the view
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
// Return error message if there is an exception
return ex.Message;
}
}
// Usage in an MVC Controller
public ActionResult GeneratePdf()
{
// Render authenticated view to string
var model = new InvoiceViewModel { /* populate model */ };
string html = this.RenderPartialViewToString("~/Views/Invoice/Details.cshtml", model);
// Convert to PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Return PDF file
return File(pdf.BinaryData, "application/pdf", "invoice.pdf");
}' Converts an MVC partial view to a string
<Extension()>
Public Shared Function RenderPartialViewToString(ByVal controller As Controller, ByVal viewPath As String, Optional ByVal model As Object = Nothing) As String
Try
' Set the model
Dim context = controller.ControllerContext
controller.ViewData.Model = model
Using sw As New StringWriter()
' Find the partial view
Dim viewResult = ViewEngines.Engines.FindPartialView(context, viewPath)
If viewResult.View Is Nothing Then
Throw New Exception($"Partial view {viewPath} could not be found.")
End If
' Create a view context
Dim viewContext As New ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw)
' Render the view
viewResult.View.Render(viewContext, sw)
viewResult.ViewEngine.ReleaseView(context, viewResult.View)
Return sw.GetStringBuilder().ToString()
End Using
Catch ex As Exception
' Return error message if there is an exception
Return ex.Message
End Try
End Function
' Usage in an MVC Controller
Public Function GeneratePdf() As ActionResult
' Render authenticated view to string
Dim model As New InvoiceViewModel() ' populate model
Dim html As String = Me.RenderPartialViewToString("~/Views/Invoice/Details.cshtml", model)
' Convert to PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Return PDF file
Return File(pdf.BinaryData, "application/pdf", "invoice.pdf")
End Functionなぜ直接変換ではなく、ビューを文字列にレンダリングするのですか?
MVCビューを文字列にレンダリングすると、いくつかの重要な利点があります:
- 認証コンテキスト: ビューは認証済みユーザーのコンテキスト内でレンダリングされる
- 完全なMVCパイプライン:
ViewBagヘルパーを含むすべてのMVC機能が動作します - レイアウトサポート: マスターページとレイアウトが正しくレンダリングされる
- モデルバインディング: 複雑なビューモデルがシームレスに動作 5.アクションフィルタ: セキュリティフィルタとロギングフィルタは正常に実行されます。
この MVC 回避策の利点は何ですか?
MVC文字列レンダリングアプローチを提供します:
– セキュリティ: 内部URLを公開する必要なし、または認証をバイパスしない – パフォーマンス: 追加のHTTPリクエストを避ける – 一貫性: ブラウザでユーザーが見る出力と同一 – 柔軟性: PDF変換前にHTMLを修正
- テスト:HTML生成を簡単にユニットテストする
レンダリング ビューにモデルを渡すには?
以下は、複雑なモデルを含む包括的な例です:
public class InvoiceController : Controller
{
private readonly IInvoiceService _invoiceService;
public async Task<ActionResult> DownloadInvoicePdf(int invoiceId)
{
// Load data within authenticated context
var invoice = await _invoiceService.GetInvoiceAsync(invoiceId);
if (invoice == null || invoice.UserId != User.Identity.GetUserId())
{
return HttpNotFound();
}
// Create view model
var viewModel = new InvoiceDetailsViewModel
{
Invoice = invoice,
Company = await _invoiceService.GetCompanyDetailsAsync(),
LineItems = await _invoiceService.GetLineItemsAsync(invoiceId),
TaxDetails = await _invoiceService.GetTaxDetailsAsync(invoiceId)
};
// Render to HTML string
string html = this.RenderPartialViewToString("~/Views/Invoice/DetailsPdf.cshtml", viewModel);
// Add custom styling for PDF
html = $@"
<html>
<head>
<style>
body {{font-family: Arial, sans-serif;}}
.invoice-header {{background-color: #f0f0f0; padding: 20px;}}
.line-items {{width: 100%; border-collapse: collapse;}}
.line-items th, .line-items td {{border: 1px solid #ddd; padding: 8px;}}
</style>
</head>
<body>
{html}
</body>
</html>";
// Convert to PDF with options
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
MarginTop = 20,
MarginBottom = 20,
MarginLeft = 10,
MarginRight = 10,
PrintHtmlBackgrounds = true
}
};
var pdf = renderer.RenderHtmlAsPdf(html);
// Add metadata
pdf.MetaData.Author = "Invoice System";
pdf.MetaData.Title = $"Invoice #{invoice.Number}";
pdf.MetaData.CreationDate = DateTime.Now;
return File(pdf.BinaryData, "application/pdf", $"Invoice-{invoice.Number}.pdf");
}
}
認証ソリューションを実装する前に、IronPDFが正しくインストールされ、ライセンスキーが設定されていることを確認してください。
次に何ができるのかを見てみましょうか? チュートリアルページをご覧ください:PDFを変換するをご覧ください。
RenderDelay
よくある質問
コンテンツがログインフォームの後ろにある場合、どのようにHTMLをPDFに変換できますか?
IronPDFはログイン認証の後ろでHTMLをPDFに変換するための複数のアプローチを提供します。TLSネットワーク認証のためにChromeHttpLoginCredentials APIを使用したり、適切な認証ヘッダーを持つSystem.Net.WebClientやHttpClientを使用してHTMLコンテンツをダウンロードしてからIronPDFでPDFに変換することができます。
ChromeHttpLoginCredentials とは何ですか?
ChromeHttpLoginCredentialsはIronPDFのネットワーク認証APIです。ChromePdfRendererのLoginCredentialsプロパティにユーザー名とパスワードを設定することで使用でき、パスワードで保護されたURLをPDFにレンダリングする際にIronPDFが自動的に認証を行います。
PDF変換でHTMLフォームベースのログインを扱うことはできますか?
はい、IronPDFはHTMLフォームベースのログインに対応しています。推奨される方法は、System.Net.WebClientまたはHttpClientを使用してログインプロセスを処理し、認証されたHTMLコンテンツをダウンロードし、IronPDFのRenderHtmlAsPdfメソッドを使用してダウンロードしたHTMLをPDFに変換することです。
認証されたページから画像やスタイルシートなどのHTML資産をダウンロードするにはどうすればよいですか?
HtmlAgilityPackを使用して、ダウンロードしたHTMLを解析し、画像やスタイルシートなどのアセットURLを抽出することができます。そしてSystem.Net.WebClientを使用して各アセットを同じ認証ヘッダーでダウンロードし、IronPDFでHTMLパッケージ全体をPDFに変換します。
認証トークンやヘッダーを扱うためのベストプラクティスは何ですか?
認証トークンを使ってIronPDFを使用する場合、HttpClientまたはWebClientを使って認証ヘッダー(ベアラートークンなど)と一緒にHTMLをダウンロードしてください。認証されたHTMLコンテンツをメモリかディスクに保存したら、IronPDFのChromePdfRendererを使ってPDFに変換します。
MVCログイン認証の回避策はありますか?
はい、IronPDFはMVCログイン認証シナリオの回避策を提供します。推奨される方法は、まず標準的な.NET HTTPクライアントを使用してHTMLコンテンツを認証してダウンロードし、認証されたHTMLをIronPDFのレンダリングエンジンに直接渡すことです。
How do I log in using HTML form authentication with IronPDF?
Using IronPDF, you can configure form-based login by providing URL and form data to 'ChromeHttpLoginCredentials'. Ensure all input data from the HTML form, including hidden fields like CSRF tokens, are captured accurately.
What common issues might arise with form-based authentication?
Common issues include handling CSRF tokens, JavaScript validations, multi-step processes, CAPTCHA requirements, and session timeouts. Properly addressing these can ensure smoother login processes for automated tasks.
How can I troubleshoot authentication failures with IronPDF?
Authentication issues can be addressed by verifying credentials, checking for 401 or 403 errors, adjusting timeout settings, ensuring proper TLS/SSL configuration, and enabling detailed logging to diagnose problems.
What are the advantages of rendering MVC views to strings before converting to PDF?
Rendering views to strings maintains the authentication context, supports MVC features, and allows modification of HTML before conversion. This approach ensures security, performance, and consistency, reflecting what users see in browsers.

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。