История .NET OWIN и HTML5

Я использую AngularJS SPA с веб-API .NET с промежуточным программным обеспечением OWIN. Я пытаюсь динамически установить базовый тег на основе виртуального пути IIS. Это необходимо при использовании истории HTML5, чтобы файлы обрабатывались по правильным путям.

Я использую промежуточное программное обеспечение OWIN для переназначения маршрутов истории HTML5 обратно на страницу index.html следующим образом:

namespace API
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapWhen((r) => !r.Request.Path.Value.Contains("api"), 
            spa =>
            {
                spa.Use((context, next) =>
                {
                    context.Request.Path = new PathString("/index.html");
                    return next();
                });

                spa.UseStaticFiles();
            });
        }
    }
}

Страница index.html выглядит следующим образом:

<!doctype html>
<html lang="en">
<head>
    <base href="/" />
</head>
<body>
    <div>here</div>
    <script src="angular/angular.js"></script>
</body>

</html>

Мне нужно динамически установить базовый тег, как указано выше, на что-то вроде: /mywebsite/. Я знаю, что вы могли бы сделать это с помощью бритвенного представления очень легко, но кажется глупым использовать MVC только для установки одного базового тега.

Я возился с чем-то вроде чтения файла и замены при запуске следующим образом:

var index = File.ReadAllText("C:\\Web\\index.html");
var baseTag = VirtualPathUtility.ToAbsolute("~");
index = index.Replace(@"<base href=""/"">", "<base href=\"" + baseTag + "\">");

app.MapWhen(r => !r.Request.Path.Value.Contains("api"), spa =>
{
    spa.Use((context, next) =>
    {
        var stream = new MemoryStream();
        var writer = new StreamWriter(stream);
        writer.Write(index);
        writer.Flush();
        stream.Position = 0;
        context.Response.Body = stream;
        return next();
    });

    spa.UseStaticFiles();
});

но я хотел посмотреть, есть ли у кого-нибудь идеи получше.

Похожие предметы:


person amcdnl    schedule 17.08.2015    source источник