1 //------------------------------------------------------------------------------
2 // <copyright file="XmlResolver.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">Microsoft</owner>
6 //------------------------------------------------------------------------------
13 using System
.Security
;
14 using System
.Security
.Permissions
;
17 using System
.Threading
.Tasks
;
19 using System
.Runtime
.Versioning
;
21 /// <include file='doc\XmlResolver.uex' path='docs/doc[@for="XmlResolver"]/*' />
23 /// <para>Resolves external XML resources named by a Uniform
24 /// Resource Identifier (URI). This class is <see langword='abstract'/>
27 public abstract partial class XmlResolver
{
28 /// <include file='doc\XmlResolver.uex' path='docs/doc[@for="XmlResolver.GetEntity1"]/*' />
31 /// URI to an Object containing the actual resource.</para>
34 public abstract Object
GetEntity(Uri absoluteUri
,
36 Type ofObjectToReturn
);
40 /// <include file='doc\XmlResolver.uex' path='docs/doc[@for="XmlResolver.ResolveUri"]/*' />
42 /// <para>[To be supplied.]</para>
45 [ResourceExposure(ResourceScope
.Machine
)]
46 [ResourceConsumption(ResourceScope
.Machine
)]
48 public virtual Uri
ResolveUri(Uri baseUri
, string relativeUri
) {
49 if ( baseUri
== null || ( !baseUri
.IsAbsoluteUri
&& baseUri
.OriginalString
.Length
== 0 ) ) {
50 Uri uri
= new Uri( relativeUri
, UriKind
.RelativeOrAbsolute
);
51 #if !SILVERLIGHT // Path.GetFullPath is SecurityCritical
52 if ( !uri
.IsAbsoluteUri
&& uri
.OriginalString
.Length
> 0 ) {
53 uri
= new Uri( Path
.GetFullPath( relativeUri
) );
59 if (relativeUri
== null || relativeUri
.Length
== 0) {
63 if ( !baseUri
.IsAbsoluteUri
) {
65 // create temporary base for the relative URIs
66 Uri tmpBaseUri
= new Uri("tmp:///");
68 // create absolute base URI with the temporary base
69 Uri absBaseUri
= new Uri(tmpBaseUri
, baseUri
.OriginalString
);
71 // resolve the relative Uri into a new absolute URI
72 Uri resolvedAbsUri
= new Uri(absBaseUri
, relativeUri
);
74 // make it relative by removing temporary base
75 Uri resolvedRelUri
= tmpBaseUri
.MakeRelativeUri(resolvedAbsUri
);
77 return resolvedRelUri
;
79 throw new NotSupportedException(Res
.GetString(Res
.Xml_RelativeUriNotSupported
));
82 return new Uri( baseUri
, relativeUri
);
88 /// <include file='doc\XmlResolver.uex' path='docs/doc[@for="XmlResolver.Credentials"]/*' />
90 /// <para>[To be supplied.]</para>
92 public virtual ICredentials Credentials
{
97 public virtual bool SupportsType(Uri absoluteUri
, Type type
) {
98 if (absoluteUri
== null) {
99 throw new ArgumentNullException("absoluteUri");
101 if (type
== null || type
== typeof(Stream
)) {