2015-09-02 11 views
22

एएसपी.नेट 5 एमवीसी 6 माइक्रोसॉफ्ट ने वेब एपीआई नियंत्रक वर्ग (ApiController) के साथ सामान्य एमवीसी नियंत्रक वर्ग (Controller) विलय कर दिया। अब से केवल Controller कक्षा उत्तराधिकारी है, जिसमें वेबएपी की विशेषताएं भी शामिल हैं।एएसपी.नेट एमवीसी 6 में एमवीसी कंट्रोलर और वेब एपीआई कंट्रोलर के बीच क्या अंतर है?

तो अब एमवीसी और वेबएपी नियंत्रकों को अलग करना उतना आसान नहीं है। दोनों Controller कक्षा से उत्तराधिकारी हैं। एकमात्र अंतर जो मैं खोज सकता हूं वह यह है कि WebApi की रूटिंग जानकारी अभी भी HttpGet, HttpPost, HttpPut और HttpDelete गुणों द्वारा प्रदान की गई है। लेकिन अब अलग-अलग विशेषताओं के साथ, विशेषता रूटिंग का उपयोग करके एमवीसी नियंत्रकों के साथ ऐसा करना संभव है।

यहां तक ​​कि विशेषताएं विलय हो गई हैं। एमवीसी नियंत्रक अब भी सामग्री बातचीत का समर्थन करते हैं।

ठोस प्रश्न हैं:

वहाँ अभी भी कोई वास्तविक अंतर है, या यह अभी जिस तरह मार्गों निर्दिष्ट कर रहे हैं? वेब ऐप्स बनाने के लिए अब कौन सा तरीका पसंदीदा है?

(लगभग) खाली MVC नियंत्रक:

public class HomeController : Controller 
{ 
    public List<Person> Index() 
    { 
     return new List<Person>() 
     { 
      new Person() {Firstname = "test1", Lastname = "test2"}, 
      new Person() {Firstname = "test3", Lastname = "test4"} 
     }; 
    } 

    public IActionResult About() 
    { 
     ViewData["Message"] = "Your application description page."; 

     return View(); 
    } 

    public IActionResult Contact() 
    { 
     ViewData["Message"] = "Your contact page."; 

     return View(); 
    } 

    public IActionResult Error() 
    { 
     return View("~/Views/Shared/Error.cshtml"); 
    } 
} 

(लगभग) खाली WebAPI नियंत्रक:

[Route("api/[controller]")] 
public class ValuesController : Controller 
{ 
    // GET: api/values 
    [HttpGet] 
    public IEnumerable<Person> Get() 
    { 
     return new List<Person>() 
     { 
      new Person() {Firstname = "test1", Lastname = "test2"}, 
      new Person() {Firstname = "test3", Lastname = "test4"} 
     }; 
    } 

    // GET api/values/5 
    [HttpGet("{id}")] 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    // POST api/values 
    [HttpPost] 
    public void Post([FromBody]string value) 
    { 
    } 

    // PUT api/values/5 
    [HttpPut("{id}")] 
    public void Put(int id, [FromBody]string value) 
    { 
    } 

    // DELETE api/values/5 
    [HttpDelete("{id}")] 
    public void Delete(int id) 
    { 
    } 
} 

संपादित करें:

आप अगर सामग्री बातचीत काम करता है की कोशिश करना चाहते हैं, तो आपको इस कोड को अपने स्टार्टअप में शामिल करना होगा। कॉन्फिगर सर्विसेज विधि, क्योंकि डिफ़ॉल्ट रूप से रिटर्न प्रकार केवल JSON है।

services.Configure<MvcOptions>(options => 
{ 
    options.AddXmlDataContractSerializerFormatter(); 
}); 
+0

@ एमवीसी 6 में कोई भी 'एपीकंट्रोलर' वर्ग नहीं है, उन्होंने इसे 'नियंत्रक' वर्ग में विलय कर दिया है। यदि आप विजुअल स्टूडियो – Domysee

+0

के साथ वेबएपी कंट्रोलर बनाते हैं तो यह वही है, मुझे लगता है कि मुझे एमवीसी 6:/ – Will

+0

में देखने की ज़रूरत है, हाँ, कई दिलचस्प बदलाव हुए – Domysee

उत्तर

17

मुझे लगता है कि आप इसमें बहुत सोच रहे हैं।

आपका पहला सवाल "एएसपी.नेट एमवीसी 6 में एमवीसी नियंत्रक और वेब एपीआई नियंत्रक का अंतर क्या है?" presupposes कि वे अलग हैं, लेकिन वे नहीं हैं। वे विलय हो गए हैं, इसलिए कोई फर्क नहीं पड़ता है।

यदि आप अपने कार्य विधियों को बंद करने के लिए अलग-अलग मार्गों को परिभाषित करना चाहते हैं जो परिणाम नहीं लौटाते हैं तो परिणाम देखें, फिर इसके लिए जाएं। यह आपके ऊपर है कि आप अपने आवेदन को व्यवस्थित कैसे करें। यह पूछने पर "वेब ऐप्स बनाने के लिए अब कौन सा तरीका पसंदीदा है?" व्यर्थ है, क्योंकि यह आपके लिए आपके आवेदन के लिए निर्णय लेने के लिए है, और जब तक एमवीसी 6 उत्पादन की अवधि में अच्छी अवधि के लिए उपयोग नहीं किया जाता है तब तक चीजों को करने का एक और आम तरीका नहीं होगा।

+0

मैंने इसके बारे में भी सोचा, विजुअल स्टूडियो में अभी भी 2 अलग-अलग टेम्पलेट्स हैं। एक एमवीसी नियंत्रक के लिए और एक WebApi नियंत्रक के लिए। इसलिए मैंने निष्कर्ष निकाला कि – Domysee

+0

@ डोमिनिक में कोई अंतर होना चाहिए, मुझे लगता है कि आपका निष्कर्ष पूरी तरह से सोचा नहीं गया है। टेम्पलेट शायद सुविधा के लिए है, ताकि पुराने संस्करण से आने वाले डेवलपर्स खो जाएंगे जब वे एक एमवीसी 6 ऐप में वेब एपीआई फीचर्स चाहते हैं। – mason

+0

जो समझ में आता है। मैं अभी भी थोड़ा उलझन में हूं क्यों माइक्रोसॉफ्ट में एक ही चीज़ के लिए 2 अलग-अलग तंत्र शामिल होंगे। यह सब के बाद एक नया संस्करण है, इसलिए वे दूसरे के पक्ष में सिर्फ एक ही रास्ता हटा सकते हैं। – Domysee

6

जबकि मेसन ने पूरी तरह से प्रश्न का उत्तर दिया, मैं मतभेदों और कुछ संसाधनों पर कुछ अतिरिक्त जानकारी प्रदान करना चाहता हूं जो आशा करते हैं कि भविष्य के भविष्य के आगंतुकों की मदद मिलेगी।

माइक्रोसॉफ्ट ने ApiController और Controller को एक वर्ग, Controller में विलय कर दिया। ऐसा करने के लिए, उन्होंने ApiController की कुछ विशेषताओं को हटा दिया।

This परिवर्तनों का वर्णन करने वाला एक महान ब्लॉग पोस्ट है।

उदाहरण के लिए, बजाय पैरामीटर विधि का उपसर्ग और मार्ग विशेषता में मार्ग के रूप में HTTP Action निर्दिष्ट करने के लिए, दोनों अब HttpGet और HttpPost विशेषताओं के साथ किया जाता है।

[HttpGet("api/visits")] 

आप WebApi परियोजना से विस्थापित करने के लिए चाहते हैं, here कुछ मार्गदर्शन करने के लिए है।

यदि आप माइग्रेट नहीं करना चाहते हैं, लेकिन बस प्रोजेक्ट को नए ASP.NET MVC संस्करण में कनवर्ट करना चाहते हैं, तो आप Web API Compatibility Shim का उपयोग कर सकते हैं। Here और here आपको इसके लिए मार्गदर्शन मिलता है।

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