C# 如何通过其共享链接验证OneDrive文档的存在?

C# 如何通过其共享链接验证OneDrive文档的存在?,c#,uwp,onedrive,C#,Uwp,Onedrive,我的C#/UWP应用程序有一个部分,用户可以在其中输入指向OneDrive文档和其他web资源的链接作为参考信息。用户可以在输入链接后单击按钮测试链接,以确保其按预期启动。我需要在启动URI之前验证链接目标是否存在,如果链接在尝试启动URI之前无效,则会引发错误 通过使用URL创建HttpWebRequest并评估响应的状态值,可以直接验证网站和非OneDrive基于web的文档。(请参见下面的示例代码。) 但是,OneDrive文档共享链接似乎在这种方法中存在问题,返回[405 Method

我的C#/UWP应用程序有一个部分,用户可以在其中输入指向OneDrive文档和其他web资源的链接作为参考信息。用户可以在输入链接后单击按钮测试链接,以确保其按预期启动。我需要在启动URI之前验证链接目标是否存在,如果链接在尝试启动URI之前无效,则会引发错误

通过使用URL创建HttpWebRequest并评估响应的状态值,可以直接验证网站和非OneDrive基于web的文档。(请参见下面的示例代码。)

但是,OneDrive文档共享链接似乎在这种方法中存在问题,返回[405 Method Not Allowed]错误。我猜这是因为OneDrive共享链接在到达实际文档之前进行了大量的转发和重定向

试试看
{
//创建HTTP请求
HttpWebRequest-request=WebRequest.Create(urlString)作为HttpWebRequest;
request.Timeout=5000;//将超时设置为5秒——不要让用户等待太久!
request.Method=“HEAD”//只获取标题信息——无需下载页面内容
//获取HTTP响应
使用(HttpWebResponse=request.GetResponse()作为HttpWebResponse)
{
//获取响应状态代码
int statusCode=(int)response.statusCode;
//请求成功…返回true
如果(状态代码>=100&&statusCode<400)
{
返回true;
}
//请求失败(服务器端错误)…返回false
else//if(状态码>=500&&statusCode<600)
{
Log.Error($“URL无效。服务器错误。(状态={statusCode})”;
返回false;
}
}
}
//处理HTTP异常
捕获(WebE例外)
{
//从异常获取整个HTTP响应
HttpWebResponse=(HttpWebResponse)e.response;
//从响应中获取HTTP状态代码
int statusCode=(int)response.statusCode;
//请求失败(客户端错误)…返回false

如果(statusCode>=400&&statusCode避免重定向并使用共享链接访问项目元数据的最佳方法是创建一个共享链接。您需要按照概述对URL进行编码并将其传递给API,如:

HEAD https://api.onedrive.com/v1.0/shares/u!{encodedurl}