c# - 从控制器访问链接
问题描述
我有以下代码
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 时,预览工作。
解决方案
您需要将身份验证数据添加到转换器的请求以访问正在转换的页面。由于您使用的是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]);
推荐阅读
- c# - 如何设置今天的日期?
- javascript - javascript中的AEM自定义功能
- twitter-bootstrap - Bootstrap:如何在不破坏布局的情况下固定 col
- php - MongoDb 使用 PHP 加入查询
- android - 如何简单地用 RX / Coroutines 替换 android AsyncTask 并返回一个值?
- java - Map-reduce作业java中URL分组的最佳方法是什么
- android - targetSdkVersion 28 ,FCM 通知图标显示为空白黑色,但使用 targetSdkVersion 20 它将显示完美的应用程序图标
- sybase - 如何在sybase ase中做嵌套游标
- php - Laravel REST API 无法从 React Fetch Request 读取输入数据
- python - eval "$(cat config_file | ./print_to_env_variables.py)" 不在函数内工作