Vah*_*iri 50 asp.net-mvc-routing asp.net-mvc-areas asp.net-core-mvc asp.net-core
如何Area
在ASP.NET Core中使用?
我有一个需要管理员部分的应用.此部分要求将其视图放置在该区域中.所有以请求开头的请求Admin/
都需要重定向到该区域.
Vah*_*iri 75
为了在ASP.NET Core应用程序中包含Area,首先我们需要在Startup.cs
文件中包含一个传统路径(最好将它放在任何非区域路径之前):
在Startup.cs/Configure方法中:
app.UseMvc(routes =>
{
routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
然后创建一个Areas
在app root中命名的文件夹,并Admin
在前者中创建另一个名称,同时在内部创建这些文件夹Admin
(ViewComponent是可选的):
现在我们在Controllers
名为的文件夹中创建一个控制器AdminController
,内容可以是:
[Area("Admin")]
[Route("admin")]
public class AdminController : Controller
{
public AdminController()
{
// do stuff
}
public IActionResult Index()
{
return View();
}
[Route("[action]/{page:int?}")]
public IActionResult Orders()
{
return View();
}
[Route("[action]")]
public IActionResult Shop()
{
return View();
}
[Route("[action]/newest")]
public IActionResult Payments()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
现在为了使其工作,您需要为返回一个的所有操作创建视图.视图的层次结构就像您在非区域Views文件夹中所拥有的那样:
现在,你应该好好去!
问题: 如果我在我的区域内有另一个控制器怎么办?
回答:
只需在旁边添加另一个控制器,AdminController
并确保路由如下所示:
[Area("Admin")]
[Route("admin/[controller]")]
public class ProductsController : Controller
{
public ProductsController()
{
//
}
[Route("{page:int?}")]
public IActionResult Index()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
重要的是[Route("admin/[controller]")]
.有了它,你可以保持路由的风格admin/controller/action/...
小智 37
在ASP.NET Core 3.0 中。如果您正在使用端点模式,在添加区域(右键单击项目、添加、新建脚手架项、区域)后,您必须在 startup.cs 配置方法上手动添加路由模式。(此时生成的 ScaffoldingReadMe.txt 已过期)。
app.UseEndpoints(endpoints =>
{
endpoints.MapAreaControllerRoute(
"Admin",
"Admin",
"Admin/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
小智 8
在Microsoft docs to migrate from ASP.NET CORE 2.2 to 3.0 中,建议是:
用 UseEndpoints 替换 UseMvc。
我在尝试修复我的区域时遇到了一些挑战,同时让 Identity 继续工作 - 但下面的解决方案似乎适用于ASP.NET CORE 3.0:
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllerRoute("areas", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
希望我也能帮助你并减少研究时间:-)
脚手架已生成所有文件并添加了所需的依赖项。
然而,应用程序的启动代码可能需要额外的更改才能端到端地工作。如果尚未完成,请将以下代码添加到应用程序的 Startup 类中的 Configure 方法:
app.UseMvc(routes =>
{
routes.MapRoute(
name : "areas",
template : "{area:exists}/{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34439 次 |
最近记录: |