Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# ASP.NET MVC में NonActionAttribute का महत्व क्या है?

NonAction एट्रिब्यूट का उपयोग तब किया जाता है जब हम एक कंट्रोलर में एक पब्लिक मेथड चाहते हैं लेकिन उसे एक्शन मेथड के रूप में ट्रीट नहीं करना चाहते। एक एक्शन मेथड एक कंट्रोलर में एक पब्लिक मेथड है जिसे URL का उपयोग करके इनवोक किया जा सकता है। इसलिए, डिफ़ॉल्ट रूप से, यदि कंट्रोलर में कोई पब्लिक मेथड है तो उसे URL रिक्वेस्ट का उपयोग करके इनवोक किया जा सकता है। कंट्रोलर में पब्लिक मेथड्स तक एक्सेस को प्रतिबंधित करने के लिए, NonAction एट्रिब्यूट का उपयोग किया जा सकता है।

समस्या: डिफ़ॉल्ट रूप से सभी पब्लिक मेथड्स एक्शन होते हैं

कंट्रोलर बिना NonAction के

using System.Web.Mvc;

namespace DemoMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        public string MyMethod1()
        {
            return "

My Method 1 Invoked

"; } public string MyMethod2() { return "

My Method 2 Invoked

"; } } }

दोनों मेथड्स URL के माध्यम से एक्सेसिबल हैं:

  • https://localhost:59146/Home/MyMethod1
  • https://localhost:59146/Home/MyMethod2

C# ASP.NET MVC में NonActionAttribute का महत्व क्या है?

C# ASP.NET MVC में NonActionAttribute का महत्व क्या है?

समाधान: NonAction एट्रिब्यूट का उपयोग करें

मान लीजिए MyMethod2 किसी आंतरिक उद्देश्य के लिए है, और हम नहीं चाहते कि इसे URL रिक्वेस्ट का उपयोग करके इनवोक किया जाए। इसे प्राप्त करने के लिए, हमें इसे NonAction एट्रिब्यूट से डेकोरेट करना होगा।

NonAction के साथ कंट्रोलर

using System.Web.Mvc;

namespace DemoMvcApplication.Controllers
{
    public class HomeController : Controller
    {
        public string MyMethod1()
        {
            return "

My Method 1 Invoked

"; } // यह मेथड अब URL के माध्यम से एक्सेसिबल नहीं है [NonAction] public string MyMethod2() { return "

My Method 2 Invoked

"; } } }

आउटपुट: MyMethod2 को NonAction बनाने के बाद

C# ASP.NET MVC में NonActionAttribute का महत्व क्या है?

अब /Home/MyMethod2 एक्सेस करने पर 404 एरर मिलेगा, जबकि /Home/MyMethod1 अभी भी काम करता है।

NonAction vs अन्य दृष्टिकोण

दृष्टिकोणURL से एक्सेसिबलकंट्रोलर के भीतर कॉल करने योग्यउपयोग मामला
पब्लिक मेथड (डिफ़ॉल्ट)हांहांसामान्य एक्शन्स
[NonAction]नहींहांहेल्पर मेथड्स, इंटरनल लॉजिक
private मेथडनहींहांसख्ती से इंटरनल लॉजिक
[ChildActionOnly]नहींकेवल @Html.Action/RenderAction के माध्यम सेव्यू पार्शियल्स/विजेट्स

NonAction के सामान्य उपयोग मामले

1. हेल्पर/यूटिलिटी मेथड्स

public class BaseController : Controller
{
    [NonAction]
    protected string RenderViewToString(string viewName, object model)
    {
        // व्यू को स्ट्रिंग में रेंडर करने की लॉजिक
    }
    
    [NonAction]
    protected JsonResult JsonSuccess(object data = null)
    {
        return Json(new { Success = true, Data = data }, JsonRequestBehavior.AllowGet);
    }
}

2. फैक्टरी/बिल्डर मेथड्स

public class ProductController : Controller
{
    [NonAction]
    private ProductViewModel BuildViewModel(Product product)
    {
        return new ProductViewModel
        {
            Id = product.Id,
            Name = product.Name,
            Price = product.Price,
            CategoryName = product.Category?.Name,
            InStock = product.Stock > 0
        };
    }
    
    public ActionResult Details(int id)
    {
        var product = _repo.Get(id);
        var model = BuildViewModel(product); // इंटरनल कॉल
        return View(model);
    }
}

3. ओवरलोडिंग संघर्ष से बचना

public class UserController : Controller
{
    // यह एक्शन है - /User/Profile/123
    public ActionResult Profile(int id) { ... }
    
    // यह भी एक्शन बन जाएगा - /User/Profile?name=john (संघर्ष!)
    // [NonAction] जोड़कर संघर्ष रोकें
    [NonAction]
    public ActionResult Profile(string name) { ... }
}

ASP.NET Core में समतुल्य

ASP.NET Core में [NonAction] एट्रिब्यूट Microsoft.AspNetCore.Mvc नेमस्पेस में उपलब्ध है और समान तरीके से काम करता है:

using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
    public IActionResult Index() => View();
    
    [NonAction]
    public string InternalHelper() => "Internal";
}

अतिरिक्त रूप से, ASP.NET Core में आप केवल private या protected मेथड्स का उपयोग कर सकते हैं (जो स्वचालित रूप से एक्शन नहीं होते), या एट्रिब्यूट रूटिंग का उपयोग करके केवल एट्रिब्यूटेड मेथड्स को एक्शन बनाएं:

[Route("api/[controller]")]
[ApiController]
public class ApiController : ControllerBase
{
    // केवल एट्रिब्यूटेड मेथड्स ही एक्शन हैं
    [HttpGet]
    public IActionResult Get() => Ok();
    
    // यह एक्शन नहीं है (कोई HTTP एट्रिब्यूट नहीं)
    public string Helper() => "Internal";
}
  1. C# ASP.NET WebAPI में Authorize एट्रिब्यूट का उपयोग क्या है? C# ASP.NET WebAPI में Authorize एट्रिब्यूट का उपयोग क्या है?

    ऑथराइजेशन यह तय करने की प्रक्रिया है कि ऑथेंटिकेटेड यूजर को किसी विशिष्ट रिसोर्स (Web API रिसोर्स) पर एक्शन करने की अनुमति है या नहीं। उदाहरण के लिए, डेटा प्राप्त करने और पोस्ट करने की अनुमति ऑथराइजेशन का हिस्सा है। ऑथराइजेशन प्रोसेस कंट्रोलर एक्शन मेथड के एक्जीक्यूट होने से पहले होता है, जो आपको यह

  1. C# ASP.NET MVC में ChildActionOnly एट्रिब्यूट का उपयोग क्या है? C# ASP.NET MVC में ChildActionOnly एट्रिब्यूट का उपयोग क्या है?

    Child Action केवल चाइल्ड रिक्वेस्ट द्वारा एक्सेसिबल होता है। यह URL रिक्वेस्ट्स का जवाब नहीं देगा। यदि कोई प्रयास किया जाता है, तो रनटाइम एरर फेंका जाएगा - Child action is accessible only by a child request। चाइल्ड एक्शन मेथड्स को व्यू से Action() और RenderAction() HTML हेल्पर्स का उपयोग करके चाइल्ड

  1. C# ASP.NET WebAPI में फिल्टर्स के विभिन्न प्रकार क्या हैं? C# ASP.NET WebAPI में फिल्टर्स के विभिन्न प्रकार क्या हैं?

    फिल्टर्स का उपयोग WebAPI फ्रेमवर्क रिक्वेस्ट प्रोसेसिंग के विभिन्न स्तरों पर अतिरिक्त लॉजिक इंजेक्ट करने के लिए किया जाता है। फिल्टर्स क्रॉस-कटिंग कंसर्न (लॉगिंग, ऑथराइज़ेशन, और कैशिंग) के लिए एक तरीका प्रदान करते हैं। फिल्टर्स को एक्शन मेथड या कंट्रोलर पर घोषणात्मक या प्रोग्रामेटिक तरीके से लागू कि