在.NET Core MVC中使用嵌套路由时寻找最佳实践.
假设CampusController.cs使用基本模型:
[Route("api/campus/")]
public class CampusController : Controller
{
...
[HttpGet]
[Route("{campusId}")]
public IActionResult GetCampusInfo ([FromQuery]int campusId) { ... }
}
Run Code Online (Sandbox Code Playgroud)
并BuildingController.cs与儿童模型一起使用:
[Route("api/campus/{campusId}/building")]
public class BuildingController : Controller
{
...
[HttpGet]
[Route("{buildingId}")]
public IActionResult GetBuilding ([FromQuery]int buildingId) { ... }
[Route("{buildingId}/")]
public IActionResult GetBuilding ([FromQuery]int buildingId) { ... }
....
(more Action Methods)
}
Run Code Online (Sandbox Code Playgroud)
如果buildingId直接映射到数据库,即使提供campusId的不是父级,也可以检索它.为了在调用时保持URL清洁,/api/campus/{campusId}/building/{buildingId}我想验证{campusId}并返回4xx编码的IActionResult,如果它无效的话.必须有一种比在每个Action Method里面包含验证逻辑更好的方法BuildingController.
CampusController首先调用验证方法,然后调用方法BuildingController?campusId如果验证失败,有没有办法让控制器级验证可以短路并返回ActionResult?编辑:当我提到验证逻辑时,我指的是API信号; …
我希望在使用防火墙 IP 地址白名单的企业环境中实现 Docker。不幸的是,不能选择按域列入白名单。
是否有我需要打开以允许计算机完全访问 Docker Hub 的所有 IP 地址(包括端口)的列表?
还想知道是否有任何建议的策略来监控这些内容是否随着时间的推移而发生变化,以便我可以确保防火墙规则得到更新?
我似乎无法序列化Claim-我在做什么错?使用此方法的其他对象序列化工作正常。
码
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("TEST");
var collection = database.GetCollection<Claim>("Claims");
var payload = new Claim("name", "value");
collection.InsertOne(payload);
Run Code Online (Sandbox Code Playgroud)
结果
一个对象被插入到MongoDB中,但除了_id设置/填充外,别无其他。
使用.NET Core 2.0.x和MongoDB.Driver 2.5.0。
更新1
手动映射成员似乎有效;只是在自动映射时,它似乎失败了。
BsonClassMap.RegisterClassMap<Claim>(cm =>
{
cm.SetIgnoreExtraElements(true);
cm.MapMember(c => c.Issuer);
cm.MapMember(c => c.OriginalIssuer);
cm.MapMember(c => c.Properties);
cm.MapMember(c => c.Subject);
cm.MapMember(c => c.Type);
cm.MapMember(c => c.Value);
cm.MapMember(c => c.ValueType);
cm.MapCreator(c => new Claim(c.Type, c.Value, c.ValueType, c.Issuer, c.OriginalIssuer, c.Subject));
});
Run Code Online (Sandbox Code Playgroud)