.NETコアの静的ファイルでアプリケーションを処理すると、ブラウザのURLを変更できません。そうすると、私は与えられた.NET Core、Angular2、NancyFX - 404ブラウザでURLが変更される
404 - Not Found
ナンシーエラーページ。
動作している唯一のURLは、ベースURL localhost:5000です。 localhost:5000/reservationsにURLを変更すると404が表示されます。ベースURLにない場合はF5を押すと404になります。
localhost:4200のbrowsersync URLを使用するとすべてが機能し、 404を使わずにF5キーを押します。これは開発時に行っていることですが、IISを使用してサーバーに展開されているときは実行されません。 IIS Expressのアプリケーション
NGビルド(ファイルはindex.htmlを一緒にwwwrootのためにコピーされます)
開始IIS Expressの
を実行
Startup.cs
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
env.ConfigureNLog("nlog.config");
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
services.AddMvc();
services.InjectServices();
services.AddOptions();
services.Configure<Endpoints>(Configuration.GetSection("Endpoints"));
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IConfiguration>(Configuration);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.Use(async (context, next) =>
{
await next();
if (!context.Request.Path.Value.StartsWith("/api/"))
{
context.Request.Path = "/index.html";
await next();
}
});
app.UseDefaultFiles();
app.UseStaticFiles();
loggerFactory.AddNLog();
app.AddNLogWeb();
app.UseOwin(x => x.UseNancy(new NancyOptions
{
Bootstrapper = new Bootstrapper(app)
}));
}
}
Bootstrapper.cs
public class Bootstrapper : DefaultNancyBootstrapper
{
readonly IApplicationBuilder _app;
public Bootstrapper(IApplicationBuilder app)
{
_app = app;
}
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
container.Register<IOptions<Endpoints>>(_app.ApplicationServices.GetService<IOptions<Endpoints>>());
container.Register<IReservationService>(_app.ApplicationServices.GetService<IReservationService>());
}
}
wwwrootの
index.htmlを
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>XXX</title>
<base href="/">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" type="image/x-icon" href="XXX">
<link href="styles.61cc257ef8131303860b.bundle.css" rel="stylesheet" />
</head>
<body>
<app-root></app-root>
<script type="text/javascript" src="inline.f68c652d205feae6e02a.bundle.js"></script>
<script type="text/javascript" src="polyfills.756a44edc7e0a68ce65c.bundle.js"></script>
<script type="text/javascript" src="vendor.940a3ce39a746f717f7b.bundle.js"></script>
<script type="text/javascript" src="main.d5f9dd82a3600822cae2.bundle.js"></script>
</body>
</html>
私は、サーバーからの静的コンテンツの取り扱いには問題があることを理解していますが、わかりません。
.NET CoreでAngularアプリケーションをホストするときに、ブラウザURLを使用して移動するにはどうすればよいですか?
アップデート1:
追加した後:
はPerformPassThrough = (context => context.Response.StatusCode == HttpStatusCode.NotFound)
404エラーメッセージが消えるが、ページには、コンソールで404以外のすべてのエラーメッセージなしで今のブランク..です
いいえ、まだ成功404 – Reft
悪いです。それは方法、それは私のために働く方法です:http://asp.net-hacker.rocks/2016/04/04/aspnetcore-and-angular2-part1.html おそらくそれはいくつかのNancyFX設定のため、私は一緒に働いたことはないそれ。 –
私の答えを見て、あなたが異議を持っていれば教えてください:)ありがとう – Reft