Tôi có một tùy chỉnh AuthorizeAttribute
trong một dự án di sản MVC5:phát hiện nếu AuthorizationAttribute tay gọi
public class AuthorizeWithLoggingAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!base.AuthorizeCore(httpContext)) {Log(FilterContext);}
}
}
Chúng tôi nhận thấy khi nhìn qua các bản ghi, rằng ngoài việc là để áp dụng cho các bộ điều khiển với [AuthorizeWithLogging]
, nó đã được gọi là một cách rõ ràng ở những nơi khác trong mã, tạo ra các bản ghi giả mạo:
var filters = new FilterInfo(FilterProviders.Providers.GetFilters(controllerContext, actionDescriptor));
foreach (var authFilter in filters.AuthorizationFilters)
{
authFilter.OnAuthorization(authContext);
if (authContext.Result != null) {return false;}
}
có cách nào để nói (thông qua StackTrace
hay một cái gì đó) cho dù phương pháp OnAuthorization
đang được một cách rõ ràng Calle d, hoặc được gọi từ thuộc tính? Điều tốt nhất tôi hiện có là Environment.StackTrace.Contains("at System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters")
.
Tại sao bạn không tìm thấy tất cả các tham chiếu đến phương thức 'OnAuthorization' của' AuthorizeAttribute' trong mã của bạn? –
Bạn đang sử dụng phiên bản MVC nào? –
@AmateurProgrammer Tôi đã làm. Họ khó để đánh bật. Nếu chúng ta có thể làm lại tất cả, chúng ta sẽ làm điều đó khác đi. – Arithmomaniac