C# 如何在我的ASP.NET MVC应用程序中设置此区域
我正在尝试在ASP.NET MVC应用程序中设置区域路由 我也在使用nuget包,而不是普通的MVC注册区域路由 根据我的理解,区域路由如下:C# 如何在我的ASP.NET MVC应用程序中设置此区域,c#,.net,asp.net-mvc,routing,attributerouting,C#,.net,Asp.net Mvc,Routing,Attributerouting,我正在尝试在ASP.NET MVC应用程序中设置区域路由 我也在使用nuget包,而不是普通的MVC注册区域路由 根据我的理解,区域路由如下:/area/controller/method 我想做的是:-/api/search/index 这意味着: 面积=>Api 控制器=>SearchController ActionMethod=>Index 但这并没有创造出这条路线。这就是它所创建的:/api/index 搜索控制器缺失 我有一个问题,注意到了RoutePrefix,所以我尝试了这
/area/controller/method
我想做的是:-/api/search/index
这意味着:
- 面积=>Api
- 控制器=>SearchController
- ActionMethod=>Index
/api/index
搜索
控制器缺失
我有一个问题,注意到了RoutePrefix
,所以我尝试了这个
[RouteArea("Api")]
[RoutePrefix("Search")]
public class SearchController : Controller
{
[POST("Index")]
public JsonResult Index(IndexInputModel indexInputModel) { .. }
}
这实际上创建了路由/api/search/index
但是为什么我需要把
RoutePrefix
放在那里呢?它是否应该足够聪明,已经知道这是一个SearchController
,并创建三段路由?您不需要在任何地方放置RoutePrefix。它只是作为重构/干燥的辅助工具。考虑:
[RouteArea("Api")]
public class SearchController : Controller
{
[POST("Search/Index")]
public ActionResult Index() { }
}
如果您有许多操作,可能希望所有操作都带有“搜索”前缀,因此您可以:
[RouteArea("Api")]
[RoutePrefix("Search")]
public class SearchController : Controller
{
[POST("Index")]
public ActionResult Index() { }
// Other actions to prefix....
}
这难道还不够聪明吗?
不是要厚颜无耻,但不是。AR从未打算为您读取所有代码并神奇地生成路由。它的目的是让你的URL放在第一位,这样你就可以看到你的URL了。并不是说这是做事情的最好或唯一的方式,只是这是我从一开始的意图
它不够聪明的真正原因是“区域”的概念与URL无关。区域是一个逻辑单元。您可以在没有任何路由前缀的情况下公开该逻辑单元(因此它将挂起~/),也可以在“This/Is/A/prefix”下公开它
然而,如果你想让它足够聪明。。。。我刚刚发布了v3.4,它将允许您这样做(如果您愿意;不必):
这将产生以下路径:~/Api/Search/Index。该区域来自控制器名称空间的最后一部分;路由前缀来自控制器名称;url的其余部分来自动作名称
还有一件事
如果要为控制器中的单个操作获取路由区域url和路由前缀鼠巢,请执行以下操作:
[RouteArea("Api")]
[RoutePrefix("Search")]
public class SearchController : Controller
{
[POST("Index")]
public ActionResult Index() { }
[GET("Something")] // yields ~/Api/Search/Something
[GET("NoPrefix", IgnoreRoutePrefix = true)] // yields ~/Api/NoPrefix
[GET("NoAreaUrl", IgnoreAreaUrl = true)] // yields ~/Search/NoAreaUrl
[GET("Absolutely-Pure", IsAbsoluteUrl = true)] // yields ~/Absolutely-Pure
public ActionResult Something() {}
}
你不需要把RoutePrefix放在任何地方。它只是作为重构/干燥的辅助工具。考虑:
[RouteArea("Api")]
public class SearchController : Controller
{
[POST("Search/Index")]
public ActionResult Index() { }
}
如果您有许多操作,可能希望所有操作都带有“搜索”前缀,因此您可以:
[RouteArea("Api")]
[RoutePrefix("Search")]
public class SearchController : Controller
{
[POST("Index")]
public ActionResult Index() { }
// Other actions to prefix....
}
这难道还不够聪明吗?
不是要厚颜无耻,但不是。AR从未打算为您读取所有代码并神奇地生成路由。它的目的是让你的URL放在第一位,这样你就可以看到你的URL了。并不是说这是做事情的最好或唯一的方式,只是这是我从一开始的意图
它不够聪明的真正原因是“区域”的概念与URL无关。区域是一个逻辑单元。您可以在没有任何路由前缀的情况下公开该逻辑单元(因此它将挂起~/),也可以在“This/Is/A/prefix”下公开它
然而,如果你想让它足够聪明。。。。我刚刚发布了v3.4,它将允许您这样做(如果您愿意;不必):
这将产生以下路径:~/Api/Search/Index。该区域来自控制器名称空间的最后一部分;路由前缀来自控制器名称;url的其余部分来自动作名称
还有一件事
如果要为控制器中的单个操作获取路由区域url和路由前缀鼠巢,请执行以下操作:
[RouteArea("Api")]
[RoutePrefix("Search")]
public class SearchController : Controller
{
[POST("Index")]
public ActionResult Index() { }
[GET("Something")] // yields ~/Api/Search/Something
[GET("NoPrefix", IgnoreRoutePrefix = true)] // yields ~/Api/NoPrefix
[GET("NoAreaUrl", IgnoreAreaUrl = true)] // yields ~/Search/NoAreaUrl
[GET("Absolutely-Pure", IsAbsoluteUrl = true)] // yields ~/Absolutely-Pure
public ActionResult Something() {}
}
据我所知,您的第一个和第二个代码片段完全相同。我错过什么了吗?是的,你说得对。复制粘贴错误。现在修复了…据我所知,您的第一个和第二个代码段完全相同。我错过什么了吗?是的,你说得对。复制粘贴错误。现在修复了。。。