Search code examples
c#asp.net-core-mvclocalhost

Failed to bind to LocalHost (invalid exception) error Visual Studio 2022


I'm building a brand new ASP.Net Core MVC project. When I try to run it in the debugger, I get this error:

System.IO.IOException
  HResult=0x80131620
  Message=Failed to bind to address https://localhost:5001.
  Source=Microsoft.AspNetCore.Server.Kestrel.Core
  StackTrace:
   at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.<BindAsync>d__2.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable.ConfiguredTaskAwaiter.GetResult()

  This exception was originally thrown at this call stack:
    [External Code]

Inner Exception 1:
AggregateException: One or more errors occurred. (An invalid argument was supplied.) (An invalid argument was supplied.)

Inner Exception 2:
SocketException: An invalid argument was supplied.

The error occurs in my Program.cs class:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run(); //<-- ERROR BREAKS HERE
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

I found this SO post getting a similar issue, however my problem is not that the address is already in use, and I am not on a mac. I have updated to the most recent VS version, 17.1.0 at time of writing, but the error persists.

Can anyone offer advice?

EDIT: I tried using the localhost port numbers that were assigned to the application at create time, 7161 and 5161, and I get the same error: "SocketException: An invalid argument was supplied."

I've also tried opening the port in Windows Firewall. No change.

EDIT 2: Here's the code in Startup.cs as well.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpClient();

        services.AddControllersWithViews();

        // declare external services and database contexts

        services.AddDistributedMemoryCache();

        services.AddHsts(options =>
        {
            options.Preload = true;
            options.IncludeSubDomains = true;
            options.MaxAge = TimeSpan.FromDays(1);
        });

        // Adds the HTTPS Redirect
        services.AddHttpsRedirection(options =>
        {
            options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
            options.HttpsPort = 5001;
        });

        services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromMinutes(20);
            options.Cookie.HttpOnly = true;
            options.Cookie.IsEssential = true;
            options.Cookie.Name = "GLEntry.Authentication";
        });

        // Add IHttpContextAccessor
        services.AddHttpContextAccessor();

        services.AddMvc();

        // May need this for application authentication? 
        services.AddAuthentication(IISDefaults.AuthenticationScheme);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();

        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        app.UseSession();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Solution

  • So this makes absolutely no sense, but I was able to get it working by setting the debugger to use "IIS Express", instead of the project name. It's the dropdown next to the green "play" button in VS; not sure what that setting's called.

    Anyway, that fixed it for me.