簡體   English   中英

帶有GET參數的.net核心自定義路由

[英].net core custom routing with GET parameter

.Net Core MVC,采用如下自定義路由:

App.UseMvc(routes =>
{
  routes.MapRoute(
  name: "fantasyBoardArea",
  //constraints: "{area=FantasyDraftBoard}/{controller=Test}/{league?}/{id}",
                  template: "{area=FantasyDraftBoard}/{leagueName?}/{controller=Test}/{action=Index}/{search?}");
});

有什么方法可以設置它,以便如果上面路線中的{leagueName}是4個字符串之一(NHL,NFL,NBA,MLB),那么我希望它使用典型路線(區域/控制器/動作/(queryParamters ) ,但還使用聯盟名作為控制器上的路由參數嗎?我不在乎路由URL看起來像"domainname.com/FantasyDraftBoard/NHL/Controller/Action/" 。如果它仍然隱藏“索引”(當它是“索引”操作時)

例如:

[Area("FantasyDraftBoard")]
public class TestController : Controller
{      
    public async Task<IActionResult> Index(string leagueName, string search)
    {
       if(!String.IsNullOrEmpty(leagueName)
       {
           //do something
       }
       //Code removed, not important
    }

如果LeagueName與這四個字符串之一不匹配,那么我希望將其忽略並將其視為常規控制器/動作路線。

注意-忽略頂部路線中的約束,這些約束僅用於測試和嘗試。

有什么想法嗎?

  app.UseMvc(routes =>
        {
            routes.MapRoute(
                        "New",
                        "{area:exists}/{leagueName?}/{controller}/{action}/{id?}",
                        new { leagueName= "NHL", controller = "Default", action = "Index" },
                        new { leagueName= "NHL|NFL" }
                    );
            routes.MapRoute(
                name: "areaRoute",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

   [Area("FantasyDraftBoard")]
   public class DefaultController : Controller
   {
    public IActionResult Index(string leagueName)
    {
        return View();
    }
   }

我驗證了LeagueName設置為值之一。

編輯:如果不存在該值,則聯賽名稱設置為NULL,但如果它包含非4的值,則返回404

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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