如何在ASP.NET Core 8.0 MVC站点中使用重写功能?

问题描述 投票:0回答:1

我正在将 ASP.NET Core 8.0 MVC 网站部署到 Windows Server 操作系统上的 IIS 服务器。

假设该网站具有以下基本 URL:

https://www.example.com/mysite/

当我对网站进行一些更新时,我也想保留旧网站。因为如果更新后的网站出现问题,我可以立即恢复到旧网站。

因此,我没有将网站部署到上面的 URL,而是决定将其部署到版本号如下所示的 URL。

  1. https://www.example.com/mysite/1.0/
  2. https://www.example.com/mysite/2.0/
  3. https://www.example.com/mysite/3.0/

我想做的事情如下:

当用户访问基本URL时,我想显示最新版本(3)的内容。

我希望基本 URL 保持显示在用户浏览器的 URL 字段中。

我觉得这类操作一般可以使用rewrite功能来实现。

此外,如果用户访问带有版本号的 URL,我希望被重定向到基本 URL。

我尝试在

app.MapControllerRoute
中自定义
Program.cs
,但没有达到我的预期效果。

我的问题是:我可以用什么方法来做我想要的事情?

或者,如果您不仅想保留网站的最新版本,还想保留网站的过去版本,请告诉我是否有更好的管理方法。

c# iis url-rewriting asp.net-core-mvc
1个回答
0
投票

当我对网站进行一些更新时,我想保留旧网站 以及。因为如果更新后的网站出现问题,我可以 立即恢复到旧网站。

根据您的场景和描述,您可以使用版本控制系统来跟踪代码库中的更改。根据您的更改,它可以让您在需要时轻松恢复到过去的版本,甚至可以比较修订版本以识别问题。此外,根据您的要求,您可能有两个或更多站点。

例如,您可能拥有生产环境、Dev 或 UAT,以便您可以使用三个不同的 Web 应用程序来实现您想要实现的目标。

但是,如果想在 IIS 中使用 URL 重写中间件,你可以这样做,在这种情况下,你可以尝试如下:

services.AddRouting();
services.AddRewrite(options =>
{
    options.AddRewrite("^mysite/(?!3.0/)(.*)", "mysite/3.0/$1", false);
    options.AddRedirect("^mysite/(.*)/[0-9]+.[0-9]+/", "mysite/$1/"); 
});

注意: 第一个 URL 规则将重定向到最新版本,而另一个将从版本化 URL 重定向。 如果您需要自定义,请参考此文档

中间件DI:

在您的program.cs中注册以下中间件参考。

app.UseRewriter();

路由定义:

在路由定义中,使用不带版本名称的路由。如下所示:

app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");

我可以用什么方法来做我想要的事情?

或者,如果您不仅想保留网站的最新版本 还有您网站的过去版本,如果有,请告诉我 更好的管理方式。

嗯,它是任意的还是完全取决于您的要求或个人参考。例如,如果您考虑方便,那么版本控制可能是一个简单的选择,但您需要很好地管理它们,或者您需要额外的分支。

但是使用IIS重写模块你也可以做到这一点,在这种情况下,你必须相应地学习它。除了某些东西可能无法工作或可能损坏之外。因此,它可以是更快或更简单的处理方式。

注意:如果您想了解更多IIS重写中间件的详细信息,请参考这个官方文档。

© www.soinside.com 2019 - 2024. All rights reserved.