我有一个带有一些控制器的主项目,例如HomeController包含操作“索引”。此操作可通过www.mysite.com/home/index进行。
然后我有另一个名为“插件”的项目,该项目在主项目中被引用。 有一个控制器,例如 CustomerController 。该控制器中的动作包含路由属性“ [Route(“ edit”)]“ 。 www.mysite.com/customer/edit 可以完成此操作。但是,我希望包含项目名称(或其他名称)的 www.mysite.com/plugin/customer/edit 可以实现此操作。
如何在我的“插件”项目中不为每个控制器设置路由属性的情况下?
顺便说一句。如果有必要,我正在使用NopCommerce 4.1。
答案 0 :(得分:2)
这是区域的方案。
1)在插件内部创建文件夹结构
Areas
..Plugin
....Controllers
....Views
2)在内部控制器中,创建基本的插件控制器“ PluginController”,在其中设置Area属性
[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.Action("Edit", "Customer", new { Area = "Plugin" })