Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在我的ASP.NET MVC应用程序中设置此区域_C#_.net_Asp.net Mvc_Routing_Attributerouting - Fatal编程技术网

C# 如何在我的ASP.NET 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,所以我尝试了这

我正在尝试在ASP.NET MVC应用程序中设置区域路由

我也在使用nuget包,而不是普通的MVC注册区域路由

根据我的理解,区域路由如下:
/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() {}
}

据我所知,您的第一个和第二个代码片段完全相同。我错过什么了吗?是的,你说得对。复制粘贴错误。现在修复了…据我所知,您的第一个和第二个代码段完全相同。我错过什么了吗?是的,你说得对。复制粘贴错误。现在修复了。。。