重新发送ASP.Net身份验证:

时间:2011-07-20 09:58:16

标签: asp.net vb.net httpwebrequest authorization

我使用authentication mode="Forms"创建了一个Asp.net Web项目。我的登录工作完美。

现在的问题是,我在网站中只有授权用户可以使用的链接。该链接的pdf文件可能不存在。

我想要做的是使用HttpWebRequest验证pdf的可用性。由于pdf文件仅适用于授权用户(web.config/location/system.web/authorization),因此我必须将HttpWebRequest标记为authrorized。但是我目前没有logincredentials(只有当用户登录并且.net框架没有得到用户的密码时)

有谁知道如何使用新的HttpWebRequest发送已经建立的授权?

感谢

MOE

2 个答案:

答案 0 :(得分:0)

重新阅读你的问题。据我所知,您有一个包含PDF的站点A,该PDF由表单身份验证保护。您有另一个没有身份验证的站点B,并且您希望在站点B上执行某些服务器端操作,具体取决于A上的链接是否存在。

要执行此操作,您可以创建HttpWebRequest并检查状态代码。 401表示链接存在但需要身份验证。 404意味着它不存在。

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
using (HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse())
{

   if (myHttpWebResponse.StatusCode == HttpStatusCode.Unauthorized)
   {
      // link exists, requires authentication
   }
   else if (myHttpWebResponse.StatusCode == HttpStatusCode.NotFound)
   {
      // link does not exists
   }                                         
}

或者,您可以使用具有已知凭据的服务帐户并对请求进行身份验证。使用HttpWebRequest进行表单身份验证并不容易,因为表单使用了您需要复制的cookie。

我不得不说以这种方式设计应用程序并不是一个好主意,你应该明确地考虑缓存。这些类型的服务器端调用会带来性能损失,并且无法很好地扩展。

答案 1 :(得分:0)

当时我找不到重新发送身份验证的解决方案,所以如果用户有权访问某个文件到自己的http处理程序,我就会移动验证。 现在我可以生成通过http-handler可访问的pdf文件的链接,并可以通过httprequest.user对象验证processrequest中的用户。