您可以使用
System.IO.Path类的
HasExtension方法来确定Uri的字符串是否具有扩展名。
通过使用Uri对象的AbsoluteUri属性,可以检索表示Uri的完整字符串。将此字符串传递给Path类的HasExtension方法将正确返回一个布尔值,指示Uri是否包含文件扩展名。
将以下代码复制并粘贴到简单的控制台应用程序中,以测试这一点。只有myUri3和myUrl4返回True,这也表明HasExtension方法可以在文件名(和扩展名)之后正确处理附加字符(即Querystrings)。
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Uri myURI1 = new Uri(@"http://www.somesite.com/");
Uri myURI2 = new Uri(@"http://www.somesite.com/filenoext");
Uri myURI3 = new Uri(@"http://www.somesite.com/filewithext.jpg");
Uri myURI4 = new Uri(@"http://www.somesite.com/filewithext.jpg?q=randomquerystring");
Console.WriteLine("Does myURI1 have an extension: " + Path.HasExtension(myURI1.AbsoluteUri));
Console.WriteLine("Does myURI2 have an extension: " + Path.HasExtension(myURI2.AbsoluteUri));
Console.WriteLine("Does myURI3 have an extension: " + Path.HasExtension(myURI3.AbsoluteUri));
Console.WriteLine("Does myURI4 have an extension: " + Path.HasExtension(myURI4.AbsoluteUri));
Console.ReadLine();
}
}
}
编辑:
根据关于确定扩展程序是否为有效扩展名的问题询问者的编辑,我已经打了一些下面的新代码(复制并粘贴到控制台应用程序中):
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Uri myUri1 = new Uri("http://www.somesite.com/folder/file.jpg?q=randomquery.string");
string path1 = String.Format("{0}{1}{2}{3}", myUri1.Scheme, Uri.SchemeDelimiter, myUri1.Authority, myUri1.AbsolutePath);
string extension1 = Path.GetExtension(path1);
Console.WriteLine("Extension of myUri1: " + extension1);
Uri myUri2 = new Uri("http://www.somesite.com/folder/?q=randomquerystring");
string path2 = String.Format("{0}{1}{2}{3}", myUri2.Scheme, Uri.SchemeDelimiter, myUri2.Authority, myUri2.AbsolutePath);
string extension2 = Path.GetExtension(path2);
Console.WriteLine("Extension of myUri1: " + extension2);
Console.ReadLine();
}
}
}
这个新代码现在解构Uri对象的所有组成部分(即Scheme – http部分等),并具体删除Uri的任何查询字符串部分。这可以解决Adriano所述的潜在问题,在这个答案的评论中,querystring可能包含一个点字符(从而潜在地搞砸了HasExtension方法)。
一旦Uri被去构造,我们现在可以正确地确定Uri字符串是否具有扩展名,以及该扩展名。
从这里,这只是一个匹配这个扩展与已知有效扩展列表的情况。这部分是.NET框架永远不会给你的东西,因为任何文件扩展名都是有效的(任何应用程序可以弥补它是自己的文件扩展名,如果这样的愿望!)