gpt4 book ai didi

c# - 如何向 ASP.NET MVC web 应用程序发出授权的 HttpWebRequest

转载 作者:太空狗 更新时间:2023-10-30 01:03:35 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 网络应用程序需要允许公共(public) API 来下载文件。这是操作代码:

public ActionResult DownloadFile(int id)
{
var item = _context.GetRepositoryFileByID(id);
if (item == null)
{
return HttpNotFound();
}
var filePath = Path.Combine(AppConfig.FilesRepositoryStorageRoot, item.IntrenalFilePath);
return File(filePath, "application/pdf");
}

这个方法是一个设置了[Authorize(Roles = "Administrator,User")] 属性的 Controller ,因此只有登录的用户才能访问这个操作

现在此操作应允许用户使用以下代码发出请求:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(fileDownloadUrl));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

我在这里缺少的是如何将授权的 HttpWebRequest 传递给 DownloadFile 操作。

我尝试过的每件事都会返回登录页面,因为应用程序无法授权用户并允许他访问 DownloadFile 操作。

我尝试使用以下代码将此 Cookie 值传递给请求该文件的网站

var authCookie = FormsAuthentication.GetAuthCookie(User.Identity.Name, true);
var authCoockieValue = authCookie.Value;

然后网站就这样使用了这个值:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(fileDownloadUrl));
request.Headers[HttpRequestHeader.Authorization] = "Bearer " + authorization;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

但这没有用..我也尝试用“Basic”而不是“Bearer”标签传递 header ,但它也是字段。

我承认我并不真正理解 ASP.NET MVC 应用程序如何将 [Authorize] 属性与 FormsAuthentication 一起使用,所以我谦虚地请求您的帮助帮助...

最佳答案

我找到了解决方案。您需要像这样向 HttpWebRequest 添加身份验证 Cookie:

Uri fileDownloadURI = new Uri(fileDownloadUrl);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileDownloadURI);
request.Headers[HttpRequestHeader.Authorization] = "Bearer " + authorization;
var authCookie = FormsAuthentication.GetAuthCookie(User.Identity.Name, true);
Cookie requestAuthCoockie = new Cookie()
{
Expires = authCookie.Expires,
Name = authCookie.Name,
Path = authCookie.Path,
Secure = authCookie.Secure,
Value = authCookie.Value,
Domain = fileDownloadURI.Host,
HttpOnly = authCookie.HttpOnly,
};
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(requestAuthCoockie);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

关于c# - 如何向 ASP.NET MVC web 应用程序发出授权的 HttpWebRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27733518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com