我已将 Asp.NET Core 应用程序作为“子应用程序”发布到已建立的 IIS 网站,但我遇到了一个问题,我不确定我现在解决的方法是否正确. 该应用程序位于以下 URL,或者无论如何都应该:
http://localhost/MyTestNetCoreApp
我发现的第一件事是在任何地方,它使用了以下代码行(例如在自定义中间件中):
context.Response.Redirect("/item_path_here")
重定向将其发送回 IIS 系统的“根”,而不是 IIS 中应用程序子目录的实际路径。有问题的页面有一个带有“/item_path_here”路由集的@page 指令。因此,我希望在重定向发生后结束的地方是:
http://localhost/MyTestNetCoreApp/item_path_here
相反,我在这里结束:
http://localhost/item_path_here
其中“MyTestNetCoreApp”子目录已从 URL 中消失,最终出现 404 错误。
我尝试将以下内容添加到“Startup.cs”:
app.UsePathBase(new PathString(Configuration["AppSettings:ApplicationPathBase"]));
app.Use((context, next) =>
{
context.Request.PathBase = Configuration["AppSettings:ApplicationPathBase"];
return next();
});
这样,无论应用程序作为已建立的 IIS 网站的“子应用程序”在何处发布,只要在“appSettings.json”文件中正确设置了“AppSettings:ApplicationPathBase”,该应用程序就应该直接运行。不幸的是,在我执行下面的下一步之前,这个“单独”并没有解决这个问题。
我能够解决这个问题的唯一方法是将“PathBase”附加到请求的路由的前面,如下所示:
context.Response.Redirect(context.Request.PathBase + "/Index");
除了前面提到的“Startup.cs”文件的修改。
同样,到目前为止这是有效的,但它是正确的方法,还是我误解了 Asp.Net Core 路由的路由概念和/或在这种情况下如何处理重定向?