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

重新发送ASP.Net身份验证:,asp.net,vb.net,httpwebrequest,authorization,Asp.net,Vb.net,Httpwebrequest,Authorization,我有一个使用authentication mode=“Forms”的Asp.net Web项目。我的登录很好 现在的问题是,我在一个网站上有一个链接,只有授权用户才能使用。该链接的pdf文件可能不存在 我想做的是用HttpWebRequest验证pdf的可用性。由于pdf文件仅对授权用户可用(web.config/location/system.web/authorization),因此我必须将HttpWebRequest标记为已授权。但是我现在没有logincredentials(只有当用户登

我有一个使用
authentication mode=“Forms”
的Asp.net Web项目。我的登录很好

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

我想做的是用
HttpWebRequest
验证pdf的可用性。由于pdf文件仅对授权用户可用(
web.config/location/system.web/authorization
),因此我必须将
HttpWebRequest
标记为已授权。但是我现在没有logincredentials(只有当用户登录并且.net framework无法获取用户密码时)

有人知道如何用新的HttpWebRequest发送已经建立的授权吗

谢谢


moe

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

为此,您可以发出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,您需要复制cookie


我不得不说用这种方式设计一个应用程序不是一个好主意,你应该明确地考虑缓存。这些类型的服务器端调用会对性能造成影响,而且扩展性不好。

当时我没有找到重新发送身份验证的解决方案,因此如果用户允许访问某个文件,我将验证移到自己的http处理程序。
现在,我可以生成指向可通过http处理程序访问的pdf文件的链接,并可以通过httprequest.user对象验证processrequest中的用户。

您要检查文件是否在磁盘上,或者该文件是否可供用户使用。您可以编辑第二个应用程序的web.config吗?pdf是否在其他站点上?您需要一个SSO解决方案来与其他站点共享身份验证。