我刚刚开始使用Asp.Net Core(以及一般的asp.net),我正在尝试为我的其余api构建不错的控制器类。
我正在尝试从基础控制器继承,以避免重新定义路由和逻辑,例如验证资源,如下所示(非工作示例):
[Route("/api/v1/users/{id}")]
public class UserController: Controller
{
protected int userId;
public override void OnActionExecuting(ActionExecutingContext context)
{
base.OnActionExecuting(context);
// Validate userId..
userId = (int) RouteData.Values["id"];
}
[HttpGet]
public IActionResult Info()
{
// Use this.userId here
return this.Json("User info..");
}
}
[Route("/friends")]
public class UserFriendsController: UserController
{
[HttpGet]
public IActionResult Info()
{
// Use this.userId here
return this.Json("List of user's friends..");
}
}
我意识到我可以把它放到一个有多个动作的单个类中,但是我的真实场景涉及更多的控制器,它们都可能想要从UserController继承。
答案 0 :(得分:1)
无法继承路由属性。
您可以使用路由中间件。请参阅documentation和the examples on Routing github repo。
此外,我可以推荐这篇ASP.NET Core 1.0 - Routing - Under the hood文章,因为它对路由的工作方式有很好的解释:
答案 1 :(得分:1)
我正在尝试从基本控制器继承以避免重新定义 路线和逻辑,例如资源验证
如果您想检查当前用户是否对资源具有访问权限,您应该使用 Resource Based Authorization 。对于其他横切问题,您可以使用Filters或Middlewares。