ASP.NET Core 2.1 中的重定向路由
Redirect routing in ASP.NET Core 2.1
我有一个带有一些控制器的主项目,例如HomeController 包含一个动作 "Index"。此操作由 www.mysite.com/home/index.
达成
然后我有 另一个名为 "plugin" 的项目,它在主项目中被引用。
有一个控制器,例如客户控制器。此控制器中的操作包含 路由属性“[Route("edit")]”。
此操作由 www.mysite.com/customer/edit 达成。但我希望可以通过 www.mysite.com/plugin/customer/edit 包含项目名称(或其他名称)来实现此操作。
如何在不为我的 "plugin" 项目中的每个控制器 设置路由属性的情况下执行此操作?
顺便说一句..如果有必要知道的话,我正在使用 NopCommerce 4.1..
这是区域场景。
1) 在您的插件中创建文件夹结构
Areas
..Plugin
....Controllers
....Views
2) Inside controllers create base plugin controller "PluginController" where you set Area attribute
[Area("Plugin")]
public class PluginController : Controller
{
...
}
3) 让你所有的插件控制器继承自 PluginController
public class CustomerController : PluginController
{
...
}
4) 在路线构建器中添加对区域的支持
app.UseMvc(routes =>
{
routes.MapRoute(
name: "defaultWithArea",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
现在您插件中的所有操作都需要 www.mysite.com/plugin/ ...
我还要注意,如果您希望从插件外部检索操作 URL,您需要像这样指定控制器区域:
@Url.Action("Edit", "Customer", new { Area = "Plugin" })
我有一个带有一些控制器的主项目,例如HomeController 包含一个动作 "Index"。此操作由 www.mysite.com/home/index.
达成然后我有 另一个名为 "plugin" 的项目,它在主项目中被引用。 有一个控制器,例如客户控制器。此控制器中的操作包含 路由属性“[Route("edit")]”。 此操作由 www.mysite.com/customer/edit 达成。但我希望可以通过 www.mysite.com/plugin/customer/edit 包含项目名称(或其他名称)来实现此操作。
如何在不为我的 "plugin" 项目中的每个控制器 设置路由属性的情况下执行此操作?
顺便说一句..如果有必要知道的话,我正在使用 NopCommerce 4.1..
这是区域场景。
1) 在您的插件中创建文件夹结构
Areas
..Plugin
....Controllers
....Views
2) Inside controllers create base plugin controller "PluginController" where you set Area attribute
[Area("Plugin")]
public class PluginController : Controller
{
...
}
3) 让你所有的插件控制器继承自 PluginController
public class CustomerController : PluginController
{
...
}
4) 在路线构建器中添加对区域的支持
app.UseMvc(routes =>
{
routes.MapRoute(
name: "defaultWithArea",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
现在您插件中的所有操作都需要 www.mysite.com/plugin/ ...
我还要注意,如果您希望从插件外部检索操作 URL,您需要像这样指定控制器区域:
@Url.Action("Edit", "Customer", new { Area = "Plugin" })