2016-03-14 2 views
3

Я использую ASP.NET 5/MVC 6, и у меня есть AngularJS SPA.Как всегда маршрут по умолчанию для каждого запроса

Я использую UI-маршрутизатор, который отлично работает, но когда я обновляю страницу по маршруту, например /customer/5 Я получаю пустую страницу. Я ожидаю, что это связано с тем, что у меня нет маршрута/контроллера, связанного с этим маршрутом.

В идеале в этом случае я хотел бы, чтобы MVC обслуживал «index.html» (моя страница по умолчанию), которая содержит весь мой код AngularJS, а затем пусть UI-маршрутизатор показывает правильную страницу.

Как это сделать? Вот подмножество моей текущей Configure функции в Startup.cs

app.UseMvc(); 
app.UseDefaultFiles(); 

app.UseStaticFiles(); 
+0

Вы можете настроить маршрутизацию в 'UseMvc' вызова: https://github.com/aspnet/Mvc/blob/25eb50120eceb62fd24ab5404210428fcdf0c400/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs#L66 – Smudge202

+0

У вас есть проблема в вашей угловой маршрутизации. Я думаю, –

+0

проверить это http://stackoverflow.com/questions/35926027/invoke-same-action-for-all-urls-in-asp-net-core-mvc/35927964#35927964 – tmg

ответ

5

Добавление пользовательского Middleware, прежде чем MVC в трубопроводе, чтобы обрабатывать все без AJAX и не статические запросы файлов.

app.UseStaticFiles(); 

app.Use(async (context, next) => 
{ 
     if (!Path.HasExtension(context.Request.Path.Value) && context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest") 
     { 
      await context.Response.WriteAsync(System.IO.File.ReadAllText("index.html")); 
     } 

     await next(); 
}); 

app.UseMvc(); 
+0

Спасибо, это работает отлично, однако, если я удаляю 'UseMVC()', он работает, но если я удалю 'services.AddMvc();' я получаю сообщение об ошибке , почему это? Я использую контроллеры WebAPI, разрешает ли вызов AddMvc это работать, а вызов 'UseMVC' предназначен только для традиционного рендеринга бритвы? – Chris

+0

Все те же контроллеры в asp.net-core. Они не сработают. Сегодня я обновлю ответ. – tmg

+1

@Chris обновленный ответ – tmg

1

У меня такая же проблема при использовании ядра Asp.net 1,1 Web API & SPA (React-Redux, созданный из CLI) отдельно. Я принимаю SPA как статические файлы внутри папки wwwroot

Код ниже работает для меня.

app.UseDefaultFiles(); 
app.UseStaticFiles(); 

app.Use(async (context, next) => 
{ 
    if (!context.Request.Path.Value.Contains("/api")) 
    { 
     context.Response.Redirect("/"); 
     //context.Response.Redirect($"/#{context.Request.Path.Value}"); 
     return; 
    } 
    await next(); 
}); 
app.UseMvc(); 
Смежные вопросы