有两个处理程序,第一个应该接受并处理格式链接
https://localhost:44306/Activity/MyActivity
第二个带有参数
https://localhost:44306/Activity/MyActivity?PortfolioId=1
但麻烦的是一切都接受第一个,第二个只接受
https://localhost:44306/Activity/MyActivity/{PortfolioID}
那些。激活后有一个斜杠参数
[HttpGet]
public IActionResult MyActivity()
{
List<Activity> MyAct = db.Activities.Where(x => x.UserId == int.Parse(User.FindFirstValue("Id"))).ToList();
return View(MyAct);
}
[HttpGet("{PortfolioId}")]
public IActionResult MyActivity(int PortfolioID)
{
List<Activity> MyAct = db.PortfolioActivities.Include(x => x.Activity).Where(x => x.PortfolioId == PortfolioID).Select(x=>x.Activity).ToList(); //db.Activities.Where(x => x.UserId == int.Parse(User.FindFirstValue("Id"))).ToList();
return View(MyAct);
}
将不同的事物称为同一个词对您来说可能并不奇怪,如果向您提供每个操作(创建、添加、删除)都称为同一个词,您将无法理解其中的幽默。
但是,您使用相同的名称 - MyActivity 命名了两个不同的事物(MyActivities 和 ActivitiesFromPortfolio)。
而且您试图解决的不是最初的问题(不同的事物被称为相同的名称),而是它的子问题(如何设置路由,以便相同的 url 执行不同的操作)。
我强烈建议解决最初的问题,而不是考虑如何最好地用显微镜敲钉子。
这里有一个选择:
这是另一种选择:
这些都是简单的选项,您甚至不必考虑如何在技术上实现此类路由。他们也是正确的。
PS“在 IT 中,只有两个非常困难的问题:如何给实体起好名字和(跳过)”