从控制器访问链接

时间:2019-02-28 21:44:31

标签: c# asp.net-core

我有以下代码

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

问题是它尝试访问的链接(我自己的控制器)受[Authorized]保护。

是否可以在链接中添加用户?

我想以这种方式访问​​功能/ 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时,预览工作正常。

1 个答案:

答案 0 :(得分:1)

您需要将身份验证数据添加到转换器对访问转换页面的请求中。由于您使用的是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]);