首页 > 解决方案 > 从控制器访问链接

问题描述

我有以下代码

PdfDocument doc = converter.ConvertUrl(BaseUrl+Path);
var PdfArray = doc.Save();
doc.Close();
return new FileStreamResult(new MemoryStream(PdfArray), "application/pdf");

问题是它试图访问的链接(我自己的控制器)受到[授权]的保护。

有没有办法在链接中添加用户?

我想以这种方式访问​​该功能 /PDFTOCV/ID

PDFTOCV 中有一个函数调用另一个控制器,该控制器的 ID 用于决定要呈现哪个 CV,问题是当我尝试从 PDFTOCV 访问该函数时,我无法授权(即使我可以访问 PDFTOCV 这是以同样的方式保护)

下面是用于从视图创建 PDF 的函数。

[Authorize]
public async Task<FileStreamResult> PDFCV(int Id)
{
  var user = _userManager.GetUserAsync(User);
  HtmlToPdf converter = new HtmlToPdf();
  var BaseUrl = HttpContext.Request.Host;
  var Path = Url.Action("PreviewCv", "Cv", new { Id = Id});
  PdfDocument doc = converter.ConvertUrl(BaseUrl+Path);
  var PdfArray = doc.Save();
  doc.Close();
  return new FileStreamResult(new MemoryStream(PdfArray),"application/pdf");
}

用于为 PreviewCV 创建视图的控制器函数。

 [Authorize]
 public async Task<IActionResult> PreviewCv(int id)
 {
     var user = await _userManager.GetUserAsync(User);
     logic here
 }

当我直接访问 PreviewCV 时,预览工作。

标签: c#asp.net-core

解决方案


您需要将身份验证数据添加到转换器的请求以访问正在转换的页面。由于您使用的是Cookie身份验证,您只需让HtmlToPdf转换器使用当前的身份验证 cookie

HtmlToPdf converter = new HtmlToPdf();
//default auth cookie name; set cookie name your application uses
string cookieName = CookieAuthenticationDefaults.CookiePrefix + CookieAuthenticationDefaults.AuthenticationScheme;
converter.Options.HttpCookies.Add(cookieName, HttpContext.Request.Cookies[cookieName]);

推荐阅读