Я использую 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();
});
но я хотел посмотреть, есть ли у кого-нибудь идеи получше.
Похожие предметы: