मैंने अपने सभी नियंत्रक कार्यों के लिए एक वैश्विक फ़िल्टर स्थापित किया है जिसमें मैं एनएचबेर्नेट सत्र खोलता हूं और बंद करता हूं। इन कार्रवाइयों में से 9 5% कुछ डेटाबेस पहुंच की आवश्यकता है, लेकिन 5% नहीं है। क्या 5% के लिए इस वैश्विक फ़िल्टर को अक्षम करने का कोई आसान तरीका है। मैं दूसरे तरीके से गोल कर सकता था और केवल उन कार्रवाइयों को सजाने के लिए जो डेटाबेस की आवश्यकता है, लेकिन यह कहीं अधिक काम करेगा।एएसपी.NET एमवीसी में वैश्विक फ़िल्टर को अक्षम करने के लिए चुनिंदा
उत्तर
आपको एक मार्कर विशेषता लिख सकते हैं:
public class SkipMyGlobalActionFilterAttribute : Attribute
{
}
और फिर कार्रवाई पर इस मार्कर की उपस्थिति के लिए अपने वैश्विक कार्रवाई फिल्टर परीक्षण में:
public class MyGlobalActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(SkipMyGlobalActionFilterAttribute), false).Any())
{
return;
}
// here do whatever you were intending to do
}
}
और फिर अगर आप छोड़ना चाहते हैं वैश्विक फ़िल्टर से कुछ क्रियाएं इसे मार्कर विशेषता के साथ सजाते हैं:
[SkipMyGlobalActionFilter]
public ActionResult Index()
{
return View();
}
तुम इस तरह अपने फिल्टर कोड बदल सकते हैं:
public class NHibernateActionFilter : ActionFilterAttribute
{
public IEnumerable<string> ActionsToSkip { get; set; }
public NHibernateActionFilter(params string[] actionsToSkip)
{
ActionsToSkip = actionsToSkip;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (null != ActionsToSkip && ActionsToSkip.Any(a =>
String.Compare(a, filterContext.ActionDescriptor.ActionName, true) == 0))
{
return;
}
//here you code
}
}
और इसका इस्तेमाल करते हैं:
[NHibernateActionFilter(new[] { "SkipFilterAction1 ", "Action2"})]
यह करने के लिए एक ही रास्ता है, लेकिन थोड़ा समय। – zszep
से अधिक बनाए रखने के लिए आप अपनी कार्रवाई का नाम बदलने और विशेषता के उपयोग में इसे बदलने के लिए भूल जाते हैं मुश्किल है यही कारण है कि, कंपाइलर आपको चेतावनी नहीं देगा। यह रखरखाव दर्द का कारण बनने की संभावना है। मुझे डारिन का जवाब पसंद है क्योंकि आपको मैन्युअल रूप से क्रियाएं निर्दिष्ट करने की आवश्यकता नहीं है। – Nashenas
तुम भी क्या इस भयानक पोस्ट में वर्णित कर सकते हैं:
बस को लागू एक कस्टम ExcludeFilterAttribute
और उसके बाद एक कस्टम ExcludeFilterProvider
।
स्वच्छ समाधान और मेरे लिए बहुत अच्छा काम किया!
एस्पनेट कोर के लिए कोई समान समाधान? – smg
यह करने के लिए सबसे अच्छा जवाब एक अलग प्रश्न पर प्रदान की जाती है:
एक कस्टम फ़िल्टर प्रदाता बनाएँ। एक वर्ग लिखें जो IFilterProvider लागू करेगा। यह IFilterProvider इंटरफ़ेस में एक विधि GetFilters है जो फ़िल्टर लौटाता है जिसे निष्पादित करने की आवश्यकता होती है।
public class MyFilterProvider : IFilterProvider
{
private readonly List<Func<ControllerContext, object>> filterconditions = new List<Func<ControllerContext, object>>();
public void Add(Func<ControllerContext, object> mycondition)
{
filterconditions.Add(mycondition);
}
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
return from filtercondition in filterconditions
select filtercondition(controllerContext) into ctrlContext
where ctrlContext!= null
select new Filter(ctrlContext, FilterScope.Global);
}
}
=========================================== ==================================
Global.asax.cs
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
MyFilterProvider provider = new MyFilterProvider();
provider.Add(d => d.RouteData.Values["action"].ToString() != "SkipFilterAction1 " ? new NHibernateActionFilter() : null);
FilterProviders.Providers.Add(provider);
}
protected void Application_Start()
{
RegisterGlobalFilters(GlobalFilters.Filters);
}
, मुझे लगता है कि मुझे यह एएसपी.नेट कोर के लिए काम कर रहा है।
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// Prepare the audit
_parameters = context.ActionArguments;
await next();
if (IsExcluded(context))
{
return;
}
var routeData = context.RouteData;
var controllerName = (string)routeData.Values["controller"];
var actionName = (string)routeData.Values["action"];
// Log action data
var auditEntry = new AuditEntry
{
ActionName = actionName,
EntityType = controllerName,
EntityID = GetEntityId(),
PerformedAt = DateTime.Now,
PersonID = context.HttpContext.Session.GetCurrentUser()?.PersonId.ToString()
};
_auditHandler.DbContext.Audits.Add(auditEntry);
await _auditHandler.DbContext.SaveChangesAsync();
}
private bool IsExcluded(ActionContext context)
{
var controllerActionDescriptor = (Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)context.ActionDescriptor;
return controllerActionDescriptor.ControllerTypeInfo.IsDefined(typeof(ExcludeFromAuditing), false) ||
controllerActionDescriptor.MethodInfo.IsDefined(typeof(ExcludeFromAuditing), false);
}
प्रासंगिक कोड 'IsExcluded' विधि में है:
कोड यह रहा।
कम से कम आजकल, यह काफी आसान है: किसी एक्शन से सभी एक्शन फ़िल्टर को बाहर करने के लिए, बस ओवरराइडएक्शनफिल्टर एट्रिब्यूट जोड़ें। OverrideAuthenticationAttribute, OverrideAuthorizationAttribute और OverrideExceptionAttribute:
अन्य फ़िल्टर के लिए इसी तरह के गुण हैं।
भी देखें https://www.strathweb.com/2013/06/overriding-filters-in-asp-net-web-api-vnext/
- 1. वैश्विक एएसपी.Net वेब एपीआई फ़िल्टर कैसे जोड़ें?
- 2. एएसपी.NET एमवीसी 3: सत्र हानि को संभालने के लिए कहां?
- 3. जैक्सन में वैश्विक संपत्ति फ़िल्टर
- 4. एएसपी.NET/IIS 7 में संपीड़न को चुनिंदा रूप से अक्षम किया जा सकता है?
- 5. एएसपी.NET एमवीसी
- 6. मैं एएसपी.NET एमवीसी
- 7. सीम के रीडायरेक्ट फ़िल्टर को अक्षम करना
- 8. CSS3 अक्षम होवर प्रभाव चुनिंदा
- 9. एएसपी.NET एमवीसी
- 10. एएसपी.NET एमवीसी
- 11. एमवीसी एएसपी.NET
- 12. एएसपी.NET एमवीसी
- 13. एएसपी.NET एमवीसी
- 14. एएसपी.NET एमवीसी
- 15. एएसपी.NET एमवीसी
- 16. एमवीसी एएसपी.NET
- 17. एएसपी.NET एमवीसी
- 18. एएसपी.NET एमवीसी बनाम एएसपी.Net फॉर्म
- 19. एएसपी.NET एमवीसी
- 20. वैश्विक कार्रवाई फ़िल्टर को ओवरराइड करना
- 21. एएसपी.NET एमवीसी
- 22. एएसपी.NET एमवीसी
- 23. फ़िल्टर को साफ़ करने के लिए कैसे करें - AngularJS
- 24. चुनिंदा ड्रॉपडाउन से डुप्लिकेट विकल्प फ़िल्टर करें
- 25. एमवीसी 3 में BeginRequest- जैसे फ़िल्टर?
- 26. एएसपी.Net: मैं ListItem को कैसे अक्षम करूं?
- 27. प्रमाणीकरण से पहले एक्शन फ़िल्टर निष्पादित करने के लिए कैसे करें फ़िल्टर एमवीसी 4
- 28. JavaDocs को अक्षम करने के लिए एनोटेशन
- 29. व्यूस्टेट को सक्षम/अक्षम करने के लिए
- 30. लोड संतुलित सर्वरों (एएसपी.Net) में चुनिंदा कैश समाशोधन
एक और कार्रवाई बनाने और इस के साथ 5% को सजाने के बारे में क्या। NHibernateNotRequiredAttribute() की तरह कुछ? – dreza
https://weblogs.asp.net/imranbaloch/new-filter-overrides-in-asp-net-mvc-5-and-asp-net-web-api-2 – dovid