2011-07-20 56 views
3

我有一个Asp.net Web项目使用authentication mode="Forms"。我的登录功能完美。重新发送ASP.Net身份验证:

现在的问题是我在一个只有授权用户可用的站点中有一个链接。该链接的pdf文件可能不存在。

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

有没有人知道如何将已建立的授权与一个新的HttpWebRequest?

感谢

教育部

+0

你想检查的是磁盘上的文件还是文件可供用户使用。 – VMAtm

+0

你可以编辑第二个应用程序的web.config吗? –

+0

PDF在不同的网站上?您需要SSO解决方案才能与其他站点共享身份验证。 – TheCodeKing

回答

0

刚刚重新阅读您的问题。据我所知你有一个网站A包含一个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。

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

0

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