DevTunnelsResourceBuilderExtensions Methods
ClassMethods12 members
Provides extension methods for adding dev tunnels resources to an
Hosting.IDistributedApplicationBuilder . AddDevTunnel(IDistributedApplicationBuilder, string, string?, DevTunnelOptions?) Section titled AddDevTunnel(IDistributedApplicationBuilder, string, string?, DevTunnelOptions?)extensionIResourceBuilder<DevTunnelResource> Adds a dev tunnel resource to the application model.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> AddDevTunnel( this IDistributedApplicationBuilder builder, string name, string? tunnelId = null, DevTunnelOptions? options = null) { // ... }}Parameters
builderIDistributedApplicationBuilder namestringtunnelId string?optionaloptionsDevRemarks
Dev tunnels can be used to expose local endpoints to the public internet via a secure tunnel. By default, the tunnel requires authentication, but anonymous access can be enabled via
DevTunnelsResourceBuilderExtensions.WithAnonymousAccess . This overload is not available in polyglot AppHosts. Use DevTunnelsResourceBuilderExtensions.AddDevTunnelForPolyglot instead. Examples
The following example shows how to create a dev tunnel resource that exposes all endpoints on a web application project and enable anonymous access:
var builder = DistributedApplication.CreateBuilder(args);var web = builder.AddProject<Projects.WebApp>("web");var tunnel = builder.AddDevTunnel("mytunnel") .WithReference(web) .WithAnonymousAccess();builder.Build().Run();GetEndpoint(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, string) Section titled GetEndpoint(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, string)extensionEndpointReference Gets the tunnel endpoint reference for the specified target resource and endpoint.
public static class DevTunnelsResourceBuilderExtensions{ public static EndpointReference GetEndpoint<TResource>( this IResourceBuilder<DevTunnelResource> tunnelBuilder, IResourceBuilder<TResource> resourceBuilder, string endpointName) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The dev tunnel resource builder.resourceBuilder IResourceBuilder<TResource> The target resource builder.endpointName stringThe name of the endpoint on the target resource.Returns
EndpointReference An ApplicationModel.EndpointReference representing the public tunnel endpoint.Exceptions
InvalidOperationExceptionThrown when the specified endpoint is not found in the tunnel.Remarks
This method is not available in polyglot AppHosts. Use
DevTunnelsResourceBuilderExtensions.GetEndpoint instead. GetEndpoint(IResourceBuilder<DevTunnelResource>, IResource, string) Section titled GetEndpoint(IResourceBuilder<DevTunnelResource>, IResource, string)extensionEndpointReference Gets the tunnel endpoint reference for the specified target resource and endpoint.
public static class DevTunnelsResourceBuilderExtensions{ public static EndpointReference GetEndpoint( this IResourceBuilder<DevTunnelResource> tunnelBuilder, IResource resource, string endpointName) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The dev tunnel resource builder.resourceIResource The target resource.endpointName stringThe name of the endpoint on the target resource.Returns
EndpointReference An ApplicationModel.EndpointReference representing the public tunnel endpoint.Remarks
This method is not available in polyglot AppHosts. Use
DevTunnelsResourceBuilderExtensions.GetEndpoint instead. GetEndpoint(IResourceBuilder<DevTunnelResource>, EndpointReference) Section titled GetEndpoint(IResourceBuilder<DevTunnelResource>, EndpointReference)extensionEndpointReference Gets the tunnel endpoint reference for the specified target endpoint.
public static class DevTunnelsResourceBuilderExtensions{ public static EndpointReference GetEndpoint( this IResourceBuilder<DevTunnelResource> tunnelBuilder, EndpointReference targetEndpointReference) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The dev tunnel resource builder.targetEndpointReference EndpointReference The target endpoint reference.Returns
EndpointReference An ApplicationModel.EndpointReference representing the public tunnel endpoint.WithAnonymousAccess(IResourceBuilder<DevTunnelResource>) Section titled WithAnonymousAccess(IResourceBuilder<DevTunnelResource>)extensionIResourceBuilder<DevTunnelResource> Allows the tunnel to be publicly accessed without authentication.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> WithAnonymousAccess( this IResourceBuilder<DevTunnelResource> tunnelBuilder) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The resource builder.Returns
IResourceBuilder<DevTunnelResource> The resource builder.Remarks
WithExpiration(IResourceBuilder<DevTunnelResource>, int) Section titled WithExpiration(IResourceBuilder<DevTunnelResource>, int)extensionIResourceBuilder<DevTunnelResource> Configures how long the tunnel can remain unused or unmodified before it expires.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> WithExpiration( this IResourceBuilder<DevTunnelResource> tunnelBuilder, int expirationHours) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The resource builder.expirationHours intThe idle expiration period, in whole hours from one hour through 30 days, inclusive.Returns
IResourceBuilder<DevTunnelResource> The resource builder.Exceptions
ArgumentNullExceptionThe tunnelBuilder is null.ArgumentOutOfRangeExceptionThe expirationHours is outside the supported range.Remarks
Applies to both new and existing tunnels. This does not limit hosting duration or access-token lifetime.
Examples
var tunnel = builder.AddDevTunnel("mytunnel") .WithExpiration(24) .WithReference(web);WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, bool) Section titled WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, bool)extensionIResourceBuilder<DevTunnelResource> Adds ports on the dev tunnel for all endpoints found on the referenced resource and sets whether anonymous access is allowed.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> WithReference<TResource>( this IResourceBuilder<DevTunnelResource> tunnelBuilder, IResourceBuilder<TResource> resourceBuilder, bool allowAnonymous) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The resource builder.resourceBuilder IResourceBuilder<TResource> The resource builder for the referenced resource.allowAnonymous boolWhether anonymous access is allowed.Returns
IResourceBuilder<DevTunnelResource> The resource builder.WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, DevTunnelPortOptions?) Section titled WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, DevTunnelPortOptions?)extensionIResourceBuilder<DevTunnelResource> Adds ports on the dev tunnel for all endpoints found on the referenced resource.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> WithReference<TResource>( this IResourceBuilder<DevTunnelResource> tunnelBuilder, IResourceBuilder<TResource> resourceBuilder, DevTunnelPortOptions? portOptions = null) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The resource builder.resourceBuilder IResourceBuilder<TResource> The resource builder for the referenced resource.portOptions DevReturns
IResourceBuilder<DevTunnelResource> The resource builder.Remarks
This overload is not available in polyglot AppHosts. Use the overload that accepts a
bool allowAnonymous parameter instead. To expose only specific endpoints on the referenced resource, use DevTunnelsResourceBuilderExtensions.WithReference . WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference) Section titled WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference)extensionIResourceBuilder<DevTunnelResource> Exposes the specified endpoint via the dev tunnel.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> WithReference( this IResourceBuilder<DevTunnelResource> tunnelBuilder, EndpointReference targetEndpoint) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The resource builder.targetEndpoint EndpointReference The endpoint to expose via the dev tunnel.Returns
IResourceBuilder<DevTunnelResource> The resource builder.WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, bool) Section titled WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, bool)extensionIResourceBuilder<DevTunnelResource> Exposes the specified endpoint via the dev tunnel and sets whether anonymous access is allowed.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> WithReference( this IResourceBuilder<DevTunnelResource> tunnelBuilder, EndpointReference targetEndpoint, bool allowAnonymous) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The resource builder.targetEndpoint EndpointReference The endpoint to expose via the dev tunnel.allowAnonymous boolWhether anonymous access is allowed.Returns
IResourceBuilder<DevTunnelResource> The resource builder.WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, DevTunnelPortOptions?) Section titled WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, DevTunnelPortOptions?)extensionIResourceBuilder<DevTunnelResource> Exposes the specified endpoint via the dev tunnel.
public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<DevTunnelResource> WithReference( this IResourceBuilder<DevTunnelResource> tunnelBuilder, EndpointReference targetEndpoint, DevTunnelPortOptions? portOptions) { // ... }}Parameters
tunnelBuilder IResourceBuilder<DevTunnelResource> The resource builder.targetEndpoint EndpointReference The endpoint to expose via the dev tunnel.portOptions DevReturns
IResourceBuilder<DevTunnelResource> The resource builder.Remarks
This overload is not available in polyglot AppHosts. Use
DevTunnelsResourceBuilderExtensions.WithReference or DevTunnelsResourceBuilderExtensions.WithReference instead. WithReference(IResourceBuilder<TResource>, IResourceBuilder<IResourceWithEndpoints>, IResourceBuilder<DevTunnelResource>) Section titled WithReference(IResourceBuilder<TResource>, IResourceBuilder<IResourceWithEndpoints>, IResourceBuilder<DevTunnelResource>)extensionIResourceBuilder<TResource> Injects service discovery and endpoint information as environment variables from the dev tunnel resource into the destination resource, using the tunneled resource's name as the service name. Each endpoint defined on the target resource will be injected using the format defined by the
ApplicationModel.ReferenceEnvironmentInjectionAnnotation on the destination resource, i.e. either "services__{sourceResourceName}__{endpointScheme}__{endpointIndex}={uriString}" for .NET service discovery, or "{RESOURCE_ENDPOINT}={uri}" for endpoint injection. public static class DevTunnelsResourceBuilderExtensions{ public static IResourceBuilder<TResource> WithReference<TResource>( this IResourceBuilder<TResource> builder, IResourceBuilder<IResourceWithEndpoints> targetResource, IResourceBuilder<DevTunnelResource> tunnelResource) { // ... }}Parameters
builderIResourceBuilder<TResource> The builder.targetResource IResourceBuilder<IResourceWithEndpoints> The resource to inject service discovery information for.tunnelResource IResourceBuilder<DevTunnelResource> The dev tunnel resource to resolve the tunnel address from.Returns
IResourceBuilder<TResource> The builder.Remarks
Referencing a dev tunnel will delay the start of the resource until the referenced dev tunnel's endpoint is allocated. This method is not available in polyglot AppHosts.