.NET Core 重定向到同一解决方案下另一个项目中的控制器

Posted

技术标签:

【中文标题】.NET Core 重定向到同一解决方案下另一个项目中的控制器【英文标题】:.NET Core Redirect to Controller in another Project under same Solution 【发布时间】:2020-01-25 21:54:04 【问题描述】:

是否可以在不使用绝对 url 的情况下重定向到 .NET Core 中同一解决方案中的另一个项目?

我之所以这么问,是因为我看到很多 Web 应用程序都有 billing.website.com 仅提供计费功能,而 app.website.com 则包含大部分应用程序。

我找到了How to use a controller in another assembly in ASP.NET Core MVC 2.0?,但不清楚用户 cookie 是否已超时,我应该将用户重定向到何处以及如何重定向?

如果我有一个项目将在处理身份验证的 url account.website.com 下,我应该如何在我的 Startup.cs 中设置它?

services.ConfigureApplicationCookie(options =>

    // Cookie settings
    options.LoginPath = "accounts.website.com";
    options.AccessDeniedPath = Environment.GetEnvironmentVariable(AccessDeniedPath);
    options.SlidingExpiration = true;
);

【问题讨论】:

当 .Net 项目发布到服务器时,没有解决方案控制的关系,这只是为了让开发人员在 IDE 中组织他们的项目。我建议使用带有其他项目完整 url 的配置应用程序设置。 【参考方案1】:

它必须是完整的绝对 URL,因为无论项目是否存在于同一个解决方案中,在运行时,它们都是完全独立且不同的 Web 应用程序。一个人不知道如何托管另一个人,事实上,他们可以在任何 IP、主机名、域、子域和端口下运行。

您应该通过配置来处理这个问题。设置如下:


    "LoginURL": "https://accounts.website.com/login"

然后你可以这样做:

services.ConfigureApplicationCookie(options =>

    options.LoginPath = Configuration["LoginURL"];
    ...
);

然后,您只需要部署特定于环境的 JSON 或环境变量来覆盖每个环境的配置值。例如,在开发时可能改为https://localhost:44301/login

【讨论】:

以上是关于.NET Core 重定向到同一解决方案下另一个项目中的控制器的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core MVC RedirectToAction 不工作

在 ASP.NET Core 中首次登录时强制重定向到另一个页面

ASP.NET Core 将 http 重定向到 https

ASP.NET Core知多少:路由重写及重定向

使用参数重定向到视图不起作用(ASP.NET Core)

使用 ID 参数重定向到操作 - .Net Core Web App MVC