在 asp.net 核心 3 中创建漂亮的 url
Create nice url in asp.net core 3
我想要一个 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}");
}
您可以在控制器中处理所有这些。
我已在 .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
获得不同的结果
一个选项是将多个 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
}
我想要一个 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}");
}
您可以在控制器中处理所有这些。
我已在 .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
获得不同的结果一个选项是将多个 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
}