2016-07-29 5 views
18

में बहिष्कृत है क्या यह सच है, "ApiController .NET कोर में बहिष्कृत हो जाएगा"? मुझे वास्तव में इस पर पेशेवर अंतर्दृष्टि की आवश्यकता है। चूंकि मैं इसे नई परियोजनाओं में उपयोग करने की योजना बना रहा हूं।क्या ApiController .NET Core

+6

संक्षिप्त उत्तर: हां। इतना छोटा जवाब नहीं: Asp.Net MVC और Asp.Net वेब API को एएसपीनेट-कोर में एक कोड बेस में विलय कर दिया गया था। इसलिए वे सभी 'नियंत्रक' से उत्तराधिकारी हैं और सभी 'IActionResult' के कार्यान्वयन वापस कर सकते हैं। इसे वेब एपीआई के लिए एमवीसी या 'जेसन' के लिए 'व्यू' बनें। आप जिस चीज की आवश्यकता है उसके आधार पर कोर को कॉन्फ़िगर करते हैं। https://docs.asp.net/en/latest/intro.html – Nkosi

उत्तर

21

एमवीसी और वेबएपीआई को एएसपी.नेट कोर में विलय कर दिया गया है, इसलिए अब ApiController कक्षा विशेष रूप से है। हालांकि, Controller एमवीसी की कक्षा उन सुविधाओं का एक समूह लाती है जिनकी आपको शायद एक वेब एपीआई विकसित करने की आवश्यकता नहीं होगी, जैसे विचार और मॉडल बाइंडिंग।

आपके पास दो विकल्प मिल गया है अगर आप कुछ अलग करना चाहते हैं:

Microsoft.AspNetCore.Mvc.Core पैकेज में ControllerBase वर्ग का प्रयोग करें।

या

अपने ApiController आधार वर्ग बनाएँ।इसके अलावा

[Controller] 
public abstract class ApiController 
{ 
    [ActionContext] 
    public ActionContext ActionContext { get; set; } 
} 

, MVC नियंत्रक खोज के लिए एक नियंत्रक के रूप में चिह्नित करने के वर्ग के लिए [Controller] विशेषता जोड़ें: कुंजी यहाँ [ActionContext] विशेषता है जो संपत्ति में वर्तमान ActionContext उदाहरण injects जोड़ना है।

मेरे “Web API in MVC 6” blogpost में और विवरण देखें।

+0

यह वास्तव में सहायक है ... – Viji

+0

वास्तव में वेबएपी संगतता शिम पैकेज से वास्तव में 'एपीकंट्रोलर' क्या है , यह सिर्फ अधिक गुणों को बांधता है लेकिन वे सभी नियंत्रक कॉन्टेक्स्ट से आधार हैं जिन्हें संपत्ति के माध्यम से इंजेक्शन दिया जाता है https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs#L36-L43 लेकिन अधिक अनुकूलता सामग्री (यह पूरी तरह से वैकल्पिक है) के साथ आता है, जैसे रूट पंजीकरण https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/Routing/WebApiCompatShimRouteBuilderExtensions.cs#L13 या WebApi2 एस्क्यू गुण – Tseng

8

एएसपी.नेट कोर में एएसपी.नेट एमवीसी और एएसपी.नेट वीपीएपीआई से ज्ञात नियमों और अवधारणाओं का उपयोग करता है। लेकिन मूल रूप से यह एक पूर्ण नया ढांचा है। इसलिए कई अवधारणाएं या आधार वर्ग हैं जिन्हें हम आसानी से भूल सकते हैं।

एएसपी.नेट एमवीसी और एएसपी.नेट वेबएपी दो सह-अस्तित्व वाले लेकिन अलग-अलग ढांचे हैं और इसलिए ApiController का उपयोग बेस क्लास के रूप में एक नियंत्रक को वेबएपी नियंत्रक के रूप में निर्दिष्ट करने के लिए किया जाना चाहिए।

एएसपी.नेट कोर में यह अब और आवश्यक नहीं है। Controller बेस क्लास का उपयोग ऐसे कार्यों के लिए किया जा सकता है जो रेजर व्यू या जेएसओएन से आउटपुट लौटाते हैं (आउटपुट फॉर्मेटर्स एक्सएमएल और अन्य प्रारूपों के साथ भी संभव है)। आपको Controller बेस क्लास की भी आवश्यकता नहीं है। बिना किसी विरासत के नियंत्रक के रूप में "सादा पुराना सी # ऑब्जेक्ट" का उपयोग करना भी संभव है। यह डेमो-कंट्रोलर का रूपरेखा के लिए एक उदाहरण है, भले ही एपीकंट्रोलर नहीं है, क्लाइंट को डेटा वितरित करने के लिए संरचनात्मक दृष्टिकोण समान है।

public class DemoController : Controller 
{  
    public async Task<IActionResult> Action() 
    { 
     var model = await _someService.GetPreciousData(); 
     return Ok(model); 
    } 
} 
+0

अंतर्दृष्टि के लिए धन्यवाद – Viji

4

दूसरों के रूप में उल्लेख किया है, ASP.NET कोर एक पूरी नई webstack कि पुराने ASP.NET MVC webstack के साथ संगत नहीं है। यह स्पष्ट रूप से इसके नाम और संस्करण में परिलक्षित होता है!

एएसपी.नेट कोर और एएसपी.नेट कोर एमवीसी में इस असंगतता को स्पष्ट करने के लिए संस्करण 1.0.0 है।

एएसपी.नेट कोर ने एमवीसी और वेबएपी को एक ही एपीआई में विलय कर दिया।

और यहाँ बात आप के लिए देख गया हो सकता है है:

आप पिछले एक ASP.NET MVC या ASP.NET WebAPI आवेदन से माइग्रेट कर रहे हैं, आप Microsoft.AspNetCore.Mvc.WebApiCompatShim पैकेज है जो कुछ प्रदान करता है आयात करने के लिए चाहते हो सकता है संगतता प्रकार जो पिछले संस्करणों से माइग्रेशन को आसान बनाता है। उनमें से ApiController वर्ग और कुछ विशेषताओं को नए वेबस्टैक एपी में हटा दिया गया था।

हालांकि, कृपया ध्यान दें कि मौजूदा अनुप्रयोगों को माइग्रेट करने में आपकी सहायता करने के लिए यह केवल वहां है। जब आप कोई नया एप्लिकेशन बनाते हैं तो आपको इस संगतता शिम का उपयोग नहीं करना चाहिए और केवल नई सामग्री का उपयोग नहीं करना चाहिए।

+0

प्रवासन युक्तियों के लिए धन्यवाद – Viji

संबंधित मुद्दे