首页 > 解决方案 > Asp.Net Core MVC 和重定向和路由

问题描述

我已将 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 路由的路由概念和/或在这种情况下如何处理重定向?

标签: asp.net-mvcasp.net-coreroutesurl-routingresponse.redirect

解决方案


推荐阅读