我正在尝试添加一个日志记录功能以保存到我的SQL Server数据库中。我试图创建ActionFilter类并应用于我的一个控制器,但无法正常工作。 我想捕获用户ID,IP地址,控制器和操作访问以及时间戳。我想念什么?
const registeredUsers= [ {
ID: 1,
CellPhone: "09123333333"
}, {
ID: 2,
CellPhone: "09121111111"
}];
phoneContacts= [ {
firstName: "aaaa",
lasttName: "aaaa",
phoneNumbers: [{id: "1", label: "mobile", number: "09121111111"},{id: "1", label: "home", number: "02188888888"}]
}, {
firstName: "bbbb",
lasttName: "bbbb",
phoneNumbers: [{id: "1", label: "mobile", number: "09122222222"},{id: "1", label: "home", number: "02177777777"}],
}]
const contactsMergerdWithID = phoneContacts.map(contact => {
const mobile = contact.phoneNumbers.find(phoneNumber => phoneNumber.label === 'mobile')
const userfound = registeredUsers.find(user => user.CellPhone === mobile.number);
return userfound ? { ...contact, ID: userfound.ID } : contact;
// incase you dont want `phoneContacts` without `ID`, you can just return `false` instead of `contact` and put `.filter(Boolean)` after the `.map()`
});
console.log(contactsMergerdWithID);
请参阅附有图片的错误消息 Screenshot of error message
我尝试过并遇到一个新问题。 enter image description here
我也尝试过这种方法。 [AuditActionFilter]->错误消息(AuditActionFilter不是属性类)
AuditAttribute Action Filter class
public class AuditAttribute : ActionFilterAttribute
{
private readonly ApplicationDbContext _db;
//Inject ApplicationDBContext
public AuditAttribute(ApplicationDbContext db)
{
_db = db;
}
IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//Stores the Request in an Accessible object
var request = filterContext.HttpContext.Request;
//Generate an audit
Portal_Logger audit = new Portal_Logger()
{
teacherNRIC = filterContext.HttpContext.User.Identity.Name,
IPAddress = Convert.ToString(ipHostInfo.AddressList.FirstOrDefault(address => address.AddressFamily == AddressFamily.InterNetwork)),
ControllerAccess = (string)filterContext.RouteData.Values["controller"],
Timestamp = DateTime.Now,
};
public DbSet<Portal_Logger> Portal_LoggerDBSet { get; set; }
//Store objects to database
_db.Portal_LoggerDBSet.Add(audit);
_db.SaveChanges();
base.OnActionExecuting(filterContext);
}
}
}
Home controller class
[AuditAttribute]
public class HomeController : Controller
{ ..content of controller
}
Portal_logger model class
public class Portal_Logger
{
[Key]
public int LoggerId { get; set; }
[StringLength(10)]
public string userid{ get; set; }
[StringLength(50)]
public string IPAddress { get; set; }
[StringLength(50)]
public string ControllerAccess { get; set; }
public DateTime? Timestamp { get; set; }
}
我尝试了这种方法,但仍无法正常工作。
public class HomeController : Controller
{
}
我已经添加了服务。将MVC添加到startup.cs
[AuditActionFilter] - error message -> "AuditActionFilter" is not an
public class HomeController : Controller
{
}
这是AuditActionFilter.cs
services.AddMvc(options => options.Filters.Add(typeof(AuditActionFilter)));
答案 0 :(得分:0)
要在特定方法或控制器上使用AuditAttribute
,可以尝试ServiceFilterAttribute
或TypeFilterAttribute
。
以下是可用的两个选项:
选项1
使用TypeFilterAttribute
。
[TypeFilter(typeof(AuditAttribute))]
public class HomeController : Controller
选项2
使用ServiceFilterAttribute
在AuditAttribute
中注册Startup.cs
services.AddScoped<AuditAttribute>();
使用AuditAttribute
[ServiceFilter(typeof(AuditAttribute))]
public class HomeController : Controller
答案 1 :(得分:0)
发生错误是因为属性上有一个参数“ DbContext”,但是将其应用于控制器时没有提供它吗?
public AuditAttribute(ApplicationDbContext db)
{
_db = db;
}