我正在开发一个简单的应用程序来管理一些静态IP地址,以此学习如何在生产环境中构建一个完整的.Net Core应用程序,其中包含用户和身份验证。
我从VisualStudio2015中的.Net Core web应用程序模板开始,该模板包括Identity Framework Core和Entity Framework Core。我已经构建了以下模型,并由此生成了带有CRUD页面的控制器。所有这些都很有效。
到目前为止,我可以使用内置代码登录/注册/注销等,没有任何问题。我希望这些数据是特定于用户的,这样用户A就可以获得他们的地址,用户B就可以获得它们的地址。因此,这将涉及到Identity Framework表的某种外键,这样它就可以将IP地址匹配到用户,然后显示它们。我想知道用.Net Core处理这个问题的最佳方法是什么?我找不到任何特定于.Net Core的示例。
型号:
public class IpAddress
{
[Key]
public int id { get; set; }
[Required]
[MaxLength(255)]
public string hostname { get; set; }
[MinLength(9)]
[MaxLength(21)]
public string ipv4 { get; set; }
[MaxLength(45)]
public string ipv6 { get; set; }
[Required]
public bool vm { get; set; }
[Required]
public bool container { get; set; }
[Required]
public bool docker { get; set; }
[Required]
public string operating_system { get; set; }
[Required]
public string description { get; set; }
}
控制器的第一部分(索引和详细信息路线):
[Authorize]
public class IpAddressesController : Controller
{
private readonly IpAddressContext _context;
public IpAddressesController(IpAddressContext context)
{
_context = context;
}
// GET: IpAddresses
public async Task<IActionResult> Index()
{
return View(await _context.IpAddresses.ToListAsync());
}
// GET: IpAddresses/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var ipAddress = await _context.IpAddresses.SingleOrDefaultAsync(m => m.id == id);
if (ipAddress == null)
{
return NotFound();
}
return View(ipAddress);
}
...
正如我所说,我认为这将非常简单,只需向模型中添加一个外键,然后使用基于该外键的Linq查询在控制器中获取数据,对吧?我对林克不是很好,所以任何帮助都会很棒。如果有帮助的话,我可以提供更多的代码。
你是对的。你需要在你的IpAddress表上添加一个外键(将你链接到用户表):
[ForeignKey("ApplicationUser"), Column("Id")]
public int UserId { get; set; }
然后在AspNetUsers表中添加信息以匹配
[ForeignKey("UserId")]
public virtual IpAddress IpAddress{ get; set; }
然后,您将能够使用LINQ来获取用户的IP地址信息,类似于:
_context.IpAddresses.SingleOrDefaultAsync(m => m.UserId == userIid);