# DevTunnelsResourceBuilderExtensions Methods

- Package: [Aspire.Hosting.DevTunnels](/reference/api/csharp/aspire.hosting.devtunnels.md)
- Type: [DevTunnelsResourceBuilderExtensions](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions.md)
- Kind: `Methods`
- Members: `11`

Provides extension methods for adding dev tunnels resources to an `Hosting.IDistributedApplicationBuilder`.

## AddDevTunnel(IDistributedApplicationBuilder, string, string?, DevTunnelOptions?)

- Name: `AddDevTunnel(IDistributedApplicationBuilder, string, string?, DevTunnelOptions?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<DevTunnelResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L55-L235)

Adds a dev tunnel resource to the application model.

```csharp
public static class DevTunnelsResourceBuilderExtensions
{
    public static IResourceBuilder<DevTunnelResource> AddDevTunnel(
        this IDistributedApplicationBuilder builder,
        string name,
        string? tunnelId = null,
        DevTunnelOptions? options = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IDistributedApplicationBuilder`)
- `name` (`string`)
- `tunnelId` (`string?`) `optional`
- `options` ([DevTunnelOptions?](/reference/api/csharp/aspire.hosting.devtunnels/devtunneloptions.md)) `optional`

## Remarks

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(IResourceBuilder<DevTunnelResource>)](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions/methods.md#withanonymousaccess-iresourcebuilder-devtunnelresource). This overload is not available in polyglot app hosts. Use [DevTunnelsResourceBuilderExtensions.AddDevTunnelForPolyglot](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions/methods.md) 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:

```csharp
var builder = DistributedApplication.CreateBuilder(args);
var web = builder.AddProject<Projects.WebApp>("web");
var tunnel = builder.AddDevTunnel("mytunnel")
    .WithReference(web)
    .WithAnonymousAccess();
builder.Build().Run();
```

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## GetEndpoint(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, string)

- Name: `GetEndpoint(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, string)`
- Modifiers: `extension`
- Returns: `EndpointReference`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L387-L391)

Gets the tunnel endpoint reference for the specified target resource and endpoint.

```csharp
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` (`string`)
  The name of the endpoint on the target resource.

## Returns

`EndpointReference` -- An `ApplicationModel.EndpointReference` representing the public tunnel endpoint.

## Exceptions

- `InvalidOperationException` -- Thrown when the specified endpoint is not found in the tunnel.

## Remarks

This method is not available in polyglot app hosts. Use [DevTunnelsResourceBuilderExtensions.GetEndpoint(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, string)](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions/methods.md#getendpoint-iresourcebuilder-devtunnelresource-iresourcebuilder-tresource-string) instead.

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## GetEndpoint(IResourceBuilder<DevTunnelResource>, IResource, string)

- Name: `GetEndpoint(IResourceBuilder<DevTunnelResource>, IResource, string)`
- Modifiers: `extension`
- Returns: `EndpointReference`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L407-L419)

Gets the tunnel endpoint reference for the specified target resource and endpoint.

```csharp
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.
- `resource` (`IResource`)
  The target resource.
- `endpointName` (`string`)
  The 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 app hosts. Use [DevTunnelsResourceBuilderExtensions.GetEndpoint(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, string)](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions/methods.md#getendpoint-iresourcebuilder-devtunnelresource-iresourcebuilder-tresource-string) instead.

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## GetEndpoint(IResourceBuilder<DevTunnelResource>, EndpointReference)

- Name: `GetEndpoint(IResourceBuilder<DevTunnelResource>, EndpointReference)`
- Modifiers: `extension`
- Returns: `EndpointReference`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L431-L443)

Gets the tunnel endpoint reference for the specified target endpoint.

```csharp
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.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithAnonymousAccess(IResourceBuilder<DevTunnelResource>)

- Name: `WithAnonymousAccess(IResourceBuilder<DevTunnelResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<DevTunnelResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L367-L368)

Allows the tunnel to be publicly accessed without authentication.

```csharp
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

Sets [DevTunnelOptions.AllowAnonymous](/reference/api/csharp/aspire.hosting.devtunnels/devtunneloptions/properties.md#allowanonymous) to `true` on [DevTunnelResource.Options](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelresource/properties.md#options) .

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, bool)

- Name: `WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, bool)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<DevTunnelResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L270-L273)

Adds ports on the dev tunnel for all endpoints found on the referenced resource and sets whether anonymous access is allowed.

```csharp
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` (`bool`)
  Whether anonymous access is allowed.

## Returns

`IResourceBuilder<DevTunnelResource>` -- The resource builder.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, DevTunnelPortOptions?)

- Name: `WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, DevTunnelPortOptions?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<DevTunnelResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L294-L302)

Adds ports on the dev tunnel for all endpoints found on the referenced resource.

```csharp
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` ([DevTunnelPortOptions?](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelportoptions.md)) `optional`
  Options for the dev tunnel ports.

## Returns

`IResourceBuilder<DevTunnelResource>` -- The resource builder.

## Remarks

This overload is not available in polyglot app hosts. Use the overload that accepts a `bool` `allowAnonymous` parameter instead. To expose only specific endpoints on the referenced resource, use [DevTunnelsResourceBuilderExtensions.WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, bool)](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions/methods.md#withreference-iresourcebuilder-devtunnelresource-iresourcebuilder-tresource-bool).

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference)

- Name: `WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<DevTunnelResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L316)

Exposes the specified endpoint via the dev tunnel.

```csharp
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.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, bool)

- Name: `WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, bool)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<DevTunnelResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L330)

Exposes the specified endpoint via the dev tunnel and sets whether anonymous access is allowed.

```csharp
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` (`bool`)
  Whether anonymous access is allowed.

## Returns

`IResourceBuilder<DevTunnelResource>` -- The resource builder.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, DevTunnelPortOptions?)

- Name: `WithReference(IResourceBuilder<DevTunnelResource>, EndpointReference, DevTunnelPortOptions?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<DevTunnelResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L348-L353)

Exposes the specified endpoint via the dev tunnel.

```csharp
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` ([DevTunnelPortOptions?](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelportoptions.md))
  Options for the dev tunnel port.

## Returns

`IResourceBuilder<DevTunnelResource>` -- The resource builder.

## Remarks

This overload is not available in polyglot app hosts. Use [DevTunnelsResourceBuilderExtensions.WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, bool)](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions/methods.md#withreference-iresourcebuilder-devtunnelresource-iresourcebuilder-tresource-bool) or [DevTunnelsResourceBuilderExtensions.WithReference(IResourceBuilder<DevTunnelResource>, IResourceBuilder<TResource>, bool)](/reference/api/csharp/aspire.hosting.devtunnels/devtunnelsresourcebuilderextensions/methods.md#withreference-iresourcebuilder-devtunnelresource-iresourcebuilder-tresource-bool) instead.

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## WithReference(IResourceBuilder<TResource>, IResourceBuilder<IResourceWithEndpoints>, IResourceBuilder<DevTunnelResource>)

- Name: `WithReference(IResourceBuilder<TResource>, IResourceBuilder<IResourceWithEndpoints>, IResourceBuilder<DevTunnelResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<TResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/cbc352350f1a9bafbaff10d14a2c8de4ac186a48/src/Aspire.Hosting.DevTunnels/DevTunnelResourceBuilderExtensions.cs#L472-L531)

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.

```csharp
public static class DevTunnelsResourceBuilderExtensions
{
    public static IResourceBuilder<TResource> WithReference<TResource>(
        this IResourceBuilder<TResource> builder,
        IResourceBuilder<IResourceWithEndpoints> targetResource,
        IResourceBuilder<DevTunnelResource> tunnelResource)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<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 app hosts.

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.
