簡體   English   中英

如何在我的ASP.NET MVC應用程序中設置此區域

[英]How to set this Area up in my ASP.NET MVC Application

我正在嘗試在ASP.NET MVC應用程序中設置區域路由。

我也在使用nuget包AttributeRouting ,而不是普通的MVC寄存器區域路由內容。

據我了解,區域路線如下所示: /area/controller/method

我想做的是:- /api/search/index

意思是:

  • 面積=> Api
  • 控制器=> SearchController
  • ActionMethod =>索引

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM