对于将sharepoint文档集成到Web应用程序中的新手我正在努力完成以下任务,因此非常感谢任何帮助或指导。
我的网页应用程序中有一个页面需要显示来自sharepoint的文档。
我使用适当的sharepoint网络服务来获取sharepoint列表中所有文档的列表,然后我挑选出我想要检索的文档并获取文档的路径,这样我最终会得到类似的结果:
公司%20Hire /服务%20Site%20Price%20Lists / 0.pdf
在我们的网络中,我可以执行以下操作:
iframePdf.Attributes [
“src”] = ConfigurationManager.AppSettings [“SharepointUrl”] + _filePath;
这会在iframe中显示文档...我遇到的问题是来自网络外部无法访问sharepoint站点(由于防火墙等)。
我们的Web应用程序所在的外部服务器上有一个vpn回到我们的网络。如果我要在服务器上的浏览器中使用文档URL,系统会提示我输入凭据,然后查看文档。
Web应用程序是否有办法使用vpn,使用我提供的凭据(例如通过模拟)来访问文档并将其显示给exernal客户端?
答案 0 :(得分:0)
您可以考虑在Web应用程序上实现一个处理程序,该处理程序负责从SharePoint下载文档并通过网络传输它们。
下载内容的一个更方便的类是System.Net.WebRequest。 This tutorial可以帮助您使用自定义HTTP处理程序。在您的网页上,您将向您的用户提供指向HTTP处理程序的超链接,例如,指定要下载的文件的查询字符串参数。您的处理程序将下载文件,在响应上设置适当的内容类型和内容处置,并将Web请求响应位复制到响应流。
WebRequest的Credentials
属性对于向SharePoint验证客户端非常重要。由于the double-hop problem,如果您使用NTLM集成Windows身份验证,这只是有点棘手。您可以通过多种方式解决双跳问题,包括明确提示输入用户凭据(通过表单),实施Kerberos或在模拟固定特权用户时自行处理授权。
答案 1 :(得分:0)
我通过执行以下操作解决了这个问题:
我使用了Web客户端类,它允许您添加凭据,我只是调用了下载文件方法。然后得到另一页从保存的位置读取pdf(保存在会话变量中的位置)并将文件写入Response流。
以下代码执行了该操作:
using (var _webclient = new WebClient())
{
_webclient.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["DomainUsername"],ConfigurationManager.AppSettings["DomainPassword"],
"domain");
_webclient.DownloadFile(ConfigurationManager.AppSettings["SharePointPortal"] + _filePath, _path);
}
Portal.Common.Objects.CommonSessionHelper.Instance.IframeUrl = _path;
iframePdf.Attributes["src"] = "PdfEmbedder.aspx";
Pdfembeder.aspx.cs如下:
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!String.IsNullOrEmpty(Portal.Common.Objects.CommonSessionHelper.Instance.IframeUrl))
{
Response.Clear();
Response.ContentType = "application/pdf";
Response.WriteFile(Portal.Common.Objects.CommonSessionHelper.Instance.IframeUrl);
Response.Flush();
Response.Close();
Portal.Common.Objects.CommonSessionHelper.Instance.IframeUrl = null;
}
}
catch (Exception error)
{
Response.Write(error.Message);
}
}