WebView.BuildLocalStreamUri(String, String) WebView.BuildLocalStreamUri(String, String) WebView.BuildLocalStreamUri(String, String) WebView.BuildLocalStreamUri(String, String) Method

Definition

Creates a URI that you can pass to NavigateToLocalStreamUri.

public : Uri BuildLocalStreamUri(Platform::String contentIdentifier, Platform::String relativePath)
Uri BuildLocalStreamUri(winrt::hstring contentIdentifier, winrt::hstring relativePath) const;
public Uri BuildLocalStreamUri(String contentIdentifier, String relativePath)
Public Function BuildLocalStreamUri(contentIdentifier As String, relativePath As String) As Uri

Parameters

contentIdentifier
String String

A unique identifier for the content the URI is referencing. This defines the root of the URI.

relativePath
String String

The path to the resource, relative to the root.

Returns

Uri Uri

The URI created by combining and normalizing the contentIdentifier and relativePath.

Examples

The following code example shows how to use this method with a resolver that will serve a file from the app package. For a complete example, see the XAML WebView control sample.


public sealed partial class TestPage : Page
{
    // ... other code ...

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // The 'Host' part of the URI for the ms-local-stream protocol needs to be a combination of the package name
        // and an application-defined key, which identifies the specific resolver, in this case 'MyTag'.
            
        Uri url = webView4.BuildLocalStreamUri("MyTag","/Minesweeper/default.html");
        StreamUriWinRTResolver myResolver = new StreamUriWinRTResolver();

        // Pass the resolver object to the navigate call.
        webView4.NavigateToLocalStreamUri(url, myResolver);
    }
}

public sealed class StreamUriWinRTResolver : IUriToStreamResolver
{
    public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
    {
        if (uri == null)
        {
            throw new Exception();
        }
        string path = uri.AbsolutePath;

        // Because of the signature of the this method, it can't use await, so we 
        // call into a seperate helper method that can use the C# await pattern.
        return GetContent(path).AsAsyncOperation();
    }

    private async Task<IInputStream> GetContent(string path)
    {
        // We use a package folder as the source, but the same principle should apply
        // when supplying content from other locations
        try
        {
            Uri localUri= new Uri("ms-appx:///html" + path);
            StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri);
            IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
            return stream.GetInputStreamAt(0);
        }
        catch (Exception) { throw new Exception("Invalid path"); }
    }
}

See also