在asp.net核心3中创建漂亮的url

问题描述 投票:1回答:1

我想要一个看起来像这样的URL:

如果artCatId!= null和tagId == null:

/Article/artCatId/100/pageNumber/2

如果artCatId == null和tagId!= null:

/Article/tagId/200/pageNumber/3

并且如果artCatId!= null和tagId!= null:

/Article/artCatId/100/tagId/200/pageNumber/3

如何创建这个漂亮的URL?

我在项目中使用了ASP.NET Core 3.1。

在控制器中:

public async Task<IActionResult> Index(int? artCatId = null, int? tagId = null, int pageNumber = 1)
{

}

在Startup.cs中:

app.UseEndpoints(endpoints =>
{
    // This doesn't work based on my expectation
    endpoints.MapControllerRoute(name: "article cat or tag", pattern: "{controller=Article}/{action}/artCatId/{artCatId?}/tagId/{tagId?}/pageNumber/{pageNumber}");
}
c# asp.net-core url url-routing asp.net-core-3.0
1个回答
1
投票

一个选项是将多个RouteAtrribute放在一个方法上:

[Route("Article/artCatID/{artCatId:int}/tagId/{tagId:int}/pageNumber/{pageNumber:int}")]
[Route("Article/artCatID/{artCatId:int}/pageNumber/{pageNumber:int}")] 
[Route("Article/tagId/{tagId:int}/pageNumber/{pageNumber:int}")] 
public IActionResult Article(int? artCatId = null, int? tagId = null, int pageNumber = 1)
{ 
   // logic to handle based on passed in values
} 

0
投票

您可以在控制器中处理所有这一切。

我已经在.net核心应用程序中进行了此操作,并测试了所有符合您的规范的URL路由。

[Route("/Home/Article/ArtCatID/{artCatId:int}/TagId/{tagId:int}/PageNumber/{pageNumber:int}")]
        public IActionResult Article(int? artCatId = null, int? tagId = null, int pageNumber = 1)
        {
            //Do some Code here
            return View();
        }
        [Route("/Home/Article/ArtCatID/{artCatId:int}/PageNumber/{pageNumber:int}")]
        public IActionResult Article(int? artCatId = null, int pageNumber = 1)
        {
            //Do some Code here
            return View();
        }
        [Route("/Home/Article/TagId/{tagId:int}/PageNumber/{pageNumber:int}")]
        public IActionResult Article(int? tagId = null, int pageNumber = 1, string placeHolder = "")
        {
            //Do some Code here
            return View();
        }

这将处理您上面的三种情况。启动时不需要路由映射即可使它也起作用。您将需要三种文章方法,但实际上我认为这很好,因为根据URL您将获得不同的结果

© www.soinside.com 2019 - 2024. All rights reserved.