2016-07-22 1 views
5

У меня проблема с веб-приложением ASP.NET Core, работающим на IIS 10. Я разрабатываю приложение с одной страницей с помощью AngularJS.Ошибка ASP.NET Core 404 в IIS 10

index.html загружается отлично, но запросы на бэкэнд не работают с кодом ошибки 404 на IIS 10. Из Visual Studio с IIS Express он работает отлично.

Может ли кто-нибудь определить, как я могу исправить запросы на бэкэнд?

Вот мой Program.cs

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

    host.Run(); 
} 

А вот мой метод Configure от 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

Включите ведение журнала ASP.NET Core (возможно, с уровнем журнала Debug) и посмотрите, есть ли какие-либо сообщения о том, почему это не работает. –

+0

Отправьте свой web.config тоже. –

+0

Вы настроили службы MVC? –

ответ

3

Вы код работает на моей машине с Kestrel. Хорошим шагом по устранению неполадок является выяснение, связана ли проблема с вашим приложением ASP.NET Core или с настройкой хоста IIS.

Попробуйте это от корня вашего проекта.

dotnet restore 
dotnet run 

Вы увидите что-то вроде этого:

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

В вашем браузере перейти к следующим двум URL. Если они не работают, то что-то не так с вашим приложением. Если они работают, что-то не так с вашим IIS-хостингом.

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

Спасибо, я мог бы это исправить. Проблема заключалась в моем приложении, но немного странно, что нужно было сбросить ошибку 404, если что-то не так с приложением. –

+1

Что случилось с приложением? В чем состояло ваше исправление? –

+1

Проблема заключалась в отсутствии файла конфигурации. У меня есть 3 файла настроек среды для разработки, постановки и производства с необходимыми строками подключения. Параметр публикации по умолчанию содержит только appsettings.json. Поэтому мне нужно изменить значение в appsettings * .json, чтобы скопировать все настройки среды. –

6

В моем случае проблема была, что мой контроллер бросил исключение, таким образом, рамки пытались использовать страницу обработчика исключений, который был не доступен, таким образом, ошибка 404, сам контроллер бросает ошибку 500