[英]How to set this Area up in my ASP.NET MVC Application
我正在嘗試在ASP.NET MVC應用程序中設置區域路由。
我也在使用nuget包AttributeRouting ,而不是普通的MVC寄存器區域路由內容。
據我了解,區域路線如下所示: /area/controller/method
我想做的是:- /api/search/index
意思是:
。
[RouteArea("Api")]
public class SearchController : Controller
{
[POST("Index")]
public JsonResult Index(IndexInputModel indexInputModel) { .. }
}
但這並沒有創造出這種路線。 它是由它創建的: /api/index
缺少search
控制器。
我看了看文檔並注意到RoutePrefix
所以我嘗試了這個。
[RouteArea("Api")]
[RoutePrefix("Search")]
public class SearchController : Controller
{
[POST("Index")]
public JsonResult Index(IndexInputModel indexInputModel) { .. }
}
並且實際上創建了路由/api/search/index
。
但是為什么我需要在其中放置RoutePrefix
? 是否已經足夠聰明,已經弄清楚這是一個SearchController
並創建了3段路線?
您無需在任何地方放置RoutePrefix。 它只是作為重構/干燥輔助工具而存在的。 考慮:
[RouteArea("Api")]
public class SearchController : Controller
{
[POST("Search/Index")]
public ActionResult Index() { }
}
如果您有許多操作,則可能希望所有操作都帶有“ Search”前綴,因此您可以執行以下操作:
[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,它將允許您執行此操作(如果您願意;不必這樣做):
namespace Krome.Web.Areas.Api
{
[RouteArea]
[RoutePrefix]
public class SearchController : Controller
{
[POST]
public ActionResult Index() { }
}
}
這將產生以下路線:〜/ Api / Search / Index。 該區域來自控制器名稱空間的最后一部分; 路由前綴來自控制器名稱; 而其余網址則來自操作名稱。
如果要為控制器中的各個操作獲取路由區域網址和路由前綴“鼠巢”,請執行以下操作:
[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() {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.