|
context.Response.ContentType = "text/html";
SPSite site = SPContext.Current.Site;
if (rssUrl.StartsWith("/")) // relative url
rssUrl = site.Url + rssUrl;
Uri rssUri = new Uri(rssUrl);
HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(rssUri);
// We need to give some extra credentials for our SharePoint sites.
// This case is checked by comparing the RSS Uri to the current SPSite uri
var contextUri = SPAlternateUrl.ContextUri;
if (rssUri.GetLeftPart(UriPartial.Authority) == contextUri.GetLeftPart(UriPartial.Authority))
{
var altUrl = SPAlternateUrl.Lookup(rssUri);
AuthenticationMode authMode = site.WebApplication.IisSettings[altUrl.UrlZone].AuthenticationMode;
if (authMode == AuthenticationMode.Forms)
{
// Handle Forms Authentification for our internal SP site
// We send the .ASPXAUTH cookie, containing our credentials
webRequest.PreAuthenticate = true;
string cookieName = System.Web.Security.FormsAuthentication.FormsCookieName;
HttpCookie authCookie = context.Request.Cookies[cookieName];
webRequest.CookieContainer = new CookieContainer(1);
webRequest.CookieContainer.Add(new Cookie(cookieName,
authCookie.Value,
authCookie.Path,
authCookie.Domain ?? rssUri.Host));
}
else if(authMode == AuthenticationMode.Windows)
{
webRequest.PreAuthenticate = true;
webRequest.Credentials = CredentialCache.DefaultNetworkCredentials;
}
}
// Handle SSL
ServicePointManager.ServerCertificateValidationCallback = VerifyServerCertificate;
HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.BypassCache);
webRequest.CachePolicy = policy;
XmlTextReader xmlReader = new XmlTextReader(webRequest.GetResponse().GetResponseStream());
rssDoc.Load(xmlReader);
|