खोज…


परिचय

एक्शन फिल्टर अटैचमेंट ASP .NET फ्रेमवर्क का एक हिस्सा है जो मुझे DRY सिद्धांत का पालन करने में मदद करने के लिए उपयोगी लगता है। आप एक साधारण घोषणात्मक टैग के साथ आम तर्क की कई पंक्तियों को बदल सकते हैं। ढांचा डिफ़ॉल्ट रूप से कई उपयोगी एक्शन फ़िल्टर विशेषताएँ प्रदान करता है, जैसे कि प्राधिकरण और हैंडल त्रुटि विशेषताएँ। यह मार्गदर्शिका आपको यह दिखाने के लिए है कि आप अपनी स्वयं की कस्टम विशेषता कैसे बना सकते हैं।

EnsurePresenseOfAttribute

यह एक विशेषता का एक उदाहरण है, जिसे मैंने यह सुनिश्चित करने के लिए बनाया है कि आवश्यक पैरामीटर किसी POST मार्ग में प्राप्त अनुरोध ऑब्जेक्ट में असाइन किए गए हैं। मैंने इस दृष्टिकोण पर फैसला किया क्योंकि मानक ModelState.IsValid दृष्टिकोण मान्य नहीं था। इसका कारण यह है कि आवश्यक विशेषताओं को अलग-अलग किया जा सकता है, जिसके आधार पर कार्रवाई को बुलाया जा रहा है।

// METHODS के लिए केवल मान्य (एट्रिब्यूट) सेट; }

// VALIDATE REQUIRED ATTRIBUTES
// FOR NON-ASYNC REQUESTS
public override void OnActionExecuting(HttpActionContext context)
{
    Dictionary<string, object> model = context.ActionArguments;
    var serialstring = JsonConvert.SerializeObject(model);
    foreach (var requirement in required.Split(','))
    {
        if (serialstring.Contains($"{requirement}\":null"))
        {
            ValueError(context, requirement);
            return;
        }
    }
    base.OnActionExecuting(context);
}

// VALIDATE THE REQUIRED ATTRIBUTES ARE PRESENT
// FOR ASYNC REQUESTS
public override Task OnActionExecutingAsync(HttpActionContext context, CancellationToken token)
{
    Dictionary<string, object> model = context.ActionArguments;
    var serialstring = JsonConvert.SerializeObject(model);
    foreach (var requirement in required.Split(','))
    {
        if (serialstring.Contains($"{requirement}\":null"))
        {
            ValueError(context, requirement);
            return Task.FromResult(0);
        }
    }
    return base.OnActionExecutingAsync(context, token);
}

// LOG ERROR AND RETURN AND SET ERROR RESPONSE
private static void ValueError(HttpActionContext context, string requirement)
{
    var action = context.ActionDescriptor.ActionName;
    AppUtils.LogError($"{action} Failed : Missing Required Attribute {requirement}. ");
    using (var controller = new BaseApiController { Request = new HttpRequestMessage() })
    {
        controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());
        context.Response = controller.InvalidInputResponse();
    }
}

सुनिश्चित करने से पहले नियंत्रक

        [HttpPost]
        [Route("api/Fitbit/Activity/Stats")]
        public async Task<HttpResponseMessage> ActivityStats(FitbitRequestDTO request)
        {
            if (string.IsNullOrEmpty(request.PatientId) || string.IsNullOrEmpty(request.DeviceId))
                return InvalidInputResponse();
            try
            {
                var tokenErrorResponse = await EnsureToken(request);
                if (tokenErrorResponse != null)
                    return tokenErrorResponse;
                var client = GetFitbitClient();
                var stats = await client.GetActivitiesStatsAsync();
                return OkResponse(stats);
            }
            catch (Exception e)
            {
                const string function = " ActivityStats ";
                AppUtils.LogException(function, e);
                return SystemErrorResponse(function, e);
            }
        }

अद्यतन नियंत्रक

        public async Task<HttpResponseMessage> ActivityStats(FitbitRequestDTO request)
        {
            try
            {
                var tokenErrorResponse = await EnsureToken(request);
                if (tokenErrorResponse != null)
                    return tokenErrorResponse;
                var client = GetFitbitClient();
                var stats = await client.GetActivitiesStatsAsync();
                return OkResponse(stats);
            }
            catch (Exception e)
            {
                const string function = " ActivityStats ";
                AppUtils.LogException(function, e);
                return SystemErrorResponse(function, e);
            }
        }


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow