.NETOWIN和HTML5历史

.NETOWIN和HTML5历史,.net,asp.net-mvc,asp.net-web-api2,owin,html5-history,.net,Asp.net Mvc,Asp.net Web Api2,Owin,Html5 History,我正在运行一个AngularJS SPA,它有一个.NETWebAPI和OWIN middlware。我正在尝试根据IIS虚拟路径动态设置基本标记。当使用HTML5历史记录时,这是必需的,以便将文件处理到正确的路径 我正在使用OWIN middlware将我的HTML5历史路径重新映射回index.html页面,如下所示: namespace API { public partial class Startup { public void Configuratio

我正在运行一个AngularJS SPA,它有一个.NETWebAPI和OWIN middlware。我正在尝试根据IIS虚拟路径动态设置基本标记。当使用HTML5历史记录时,这是必需的,以便将文件处理到正确的路径

我正在使用OWIN middlware将我的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>
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();
});
但我想看看是否有人有更好的想法

类似项目: