.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 中首次登录时强制重定向到另一个页面