2016-07-22 14 views
5

Mam problem z aplikacją WWW ASP.NET Core działającą w IIS 10. Pracuję nad aplikacją Single Page z AngularJS.Błąd ASP.NET Core 404 na IIS 10

Plik index.html ładuje się idealnie, ale żądania zaplecza nie zawierają kodu błędu 404 w programie IIS 10. Program Visual Studio z usługą IIS Express działa doskonale.

Czy ktoś może wykryć, jak mogę poprawić żądania backendu?

Oto mój Program.cs

public static void Main(string[] args) 
{ 
    var host = new WebHostBuilder() 
     .UseKestrel() 
     .UseContentRoot(Directory.GetCurrentDirectory()) 
     .UseIISIntegration() 
     .UseStartup<Startup>() 
     .Build(); 

    host.Run(); 
} 

A oto moja metoda Konfiguracja z Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    app.UseDefaultFiles(); 

    app.UseStaticFiles(); 

    app.UseIdentity(); 

    // Custom middleware for Angular UI-Router 
    app.Use(async (context, next) => 
    { 
     if (!Path.HasExtension(context.Request.Path.Value) 
     && context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest" 
     && context.Request.Method.ToUpper() != "POST" 
     && context.Request.Method.ToUpper() != "PUT" 
     && context.Request.Method.ToUpper() != "DELETE") 
     { 
      await context.Response.WriteAsync(File.ReadAllText(env.WebRootPath + "/index.html")); 
     } 

     await next(); 
    }); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "api/{controller=Home}/{action=Index}/{id?}"); 
    }); 
} 
+0

Włącz rejestrowanie w środowisku ASP.NET Core (prawdopodobnie z poziomem dziennika debugowania) i zobacz, czy są jakieś komunikaty o tym, dlaczego to się nie udało –

+0

Opublikuj także swój plik web.config. –

+0

Czy skonfigurowałeś usługi MVC? –

Odpowiedz

3

kod działa na moim komputerze z Kestrel. Dobrym krokiem do rozwiązania problemu jest sprawdzenie, czy problem dotyczy aplikacji ASP.NET Core lub konfiguracji IIS Hosting.

Spróbuj tego z katalogu głównego projektu.

dotnet restore 
dotnet run 

będzie zobaczyć coś takiego:

Hosting environment: Production 
Content root path: C:\MyApplicationPath 
Now listening on: http://localhost:5000 
Application started. Press Ctrl+C to shut down. 

W przeglądarce przejść do dwóch następujących adresów URL. Jeśli nie działają, oznacza to, że coś jest nie tak z twoją aplikacją. Jeśli działają, coś jest nie tak z hostingiem IIS.

localhost:5000  // you will see your index.html page 
localhost:5000/api // you will see your default routes output 
+1

Dzięki, że mogę to naprawić. Problem tkwił w mojej aplikacji, ale jest to trochę dziwne, że mogę rzucić błąd 404, jeśli coś jest nie tak z aplikacją. –

+1

Co było nie tak z aplikacją? Jaka była Twoja poprawka? –

+1

Problemem był brakujący plik konfiguracyjny. Mam 3 plik appsettings środowiska dla rozwoju, wdrażania i produkcji z niezbędnymi ciągami połączenia. Domyślna opcja publikowania zawiera tylko appsettings.json. Muszę więc zmienić wartość na appsettings * .json, aby skopiować wszystkie ustawienia środowiska. –

6

W moim przypadku problemem było to, że mój kontroler zwrócił wyjątek, a zatem ramy próbował użyć strony obsługi wyjątku, który nie był dostępny, więc błąd 404, regulator sam rzucał błąd 500