Я столкнулся с аналогичной проблемой, используя Angular js, и использовал немного другой подход для решения проблемы.
Мы использовали Owin для отображения маршрута к точке входа в SPA (index.html). Это позволяет вам получить доступ к SPA и переходить на разные страницы. Однако, если вы когда-либо обновляли страницу, вы получали ошибку 404. По сути, маршрутизация AngularJS и маршрутизация Owin/Katana наступали друг другу на пятки.
Я решил проблему, создав собственный DelegatingHandler. Этот обработчик делегирования используется всякий раз, когда Owin/Katana не может найти маршрут, соответствующий запросу (404).
public class CustomDelegatingHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Task<HttpResponseMessage> response = base.SendAsync(request, cancellationToken);
if (response.Result.StatusCode == HttpStatusCode.NotFound)
{
response.Result.Content = new StringContent(File.ReadAllText(@"index.html"));
response.Result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
response.Result.StatusCode = HttpStatusCode.OK;
}
return response;
}
}
Фрагмент выше возвращает index.html, точку входа SPA, когда мы не можем найти страницу, соответствующую запросу.
Чтобы использовать этот обработчик делегирования, вы должны добавить следующую строку в свой HttpConfiguration() при запуске хоста Owin:
var httpConfig = new HttpConfiguration();
httpConfig.MessageHandlers.Add(new CustomDelegatingHandler());
Короче говоря, у меня есть маршрут по умолчанию, который сопоставляется с SPA, и любой нераспознанный маршрут будет проходить через DelegatingHandler и обслуживать тот же SPA. Мы не изменяем Request.Path, позволяя SPA направлять запрос на нужную страницу.
person
Justin
schedule
02.06.2016
/app/*
) вернет файлindex.html
. - person Aaron Powell   schedule 02.12.2014