5

मैंने डिफ़ॉल्ट एएसपी.नेट कोर एमवीसी टेम्पलेट का उपयोग करके एक प्रोजेक्ट बनाया है। मैं /api/{Controller} के तहत एक विश्वसनीय API भी बनाना चाहता हूं। मैंने एक नया वेब एपीआई नियंत्रक (मानक वेब एपीआई नियंत्रक वर्ग टेम्पलेट) जोड़ा लेकिन मैं इसे कॉल नहीं कर सकता। मुझे यह कहते हुए एक त्रुटि मिल रही है कि पृष्ठ नहीं मिला। मैं Startup.csमें एक मार्ग को जोड़ने की कोशिश की है, लेकिन यह कुछ भी नहीं करता है:मौजूदा एएसपी.नेट कोर एमवीसी में वेब एपीआई नियंत्रक कैसे जोड़ें?

app.UseMvc(routes => 
{ 
    routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}"); 
    routes.MapRoute(name: "api", template: "api/{controller=Admin}"); 
}); 

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

जैसा कि मैंने कहा, यह सब डिफ़ॉल्ट टेम्पलेट्स है। यहाँ वेब एपीआई नियंत्रक कि मैं जोड़ा है:

[Route("api/[controller]")] 
public class AdminController : Controller 
{     
    // 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) 
    { 
    } 
} 
+0

हम्म, मैं अपने घर पीसी पर नहीं हूं, इसलिए मैं गलत हो सकता हूं, लेकिन मुझे नहीं लगता कि आपको एपीआई के लिए एक नया मार्ग जोड़ने की जरूरत है। मुझे लगता है कि आप केवल एपीकंट्रोलर बेस क्लास से उत्तराधिकारी हैं, और प्राप्त करते हैं कि आप इससे स्वयं हैं। तो एमवीसी आपके लिए रूटिंग करना चाहिए। इस बिंदु पर, आपके रूटिंग में, आपके पास केवल एक चीज है जो आपकी डिफ़ॉल्ट रूटिंग है, और एमवीसी आपके लिए एपीआई रूटिंग को संभालेगा। –

+0

यही मैंने कल्पना की है, फिर भी http: // localhost: 278 9 1/एपीआई/एडमिन परिणाम ERR_CONNECTION_REFUSED में नेविगेट कर रहा है। –

+0

https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api आधे रास्ते तक स्क्रॉल करें उत्पाद नियंत्रक। यह एपीकंट्रोलर से प्राप्त होता है, नियंत्रक से नहीं। –

उत्तर

0

ASP.NET कोर, v2.0.1 (एक है कि VS2017 की जरूरत है) के नवीनतम संस्करण में अद्यतन करने के बाद की आवश्यकता होगी, समस्या ही हल हो गई। मुझे लगता है कि यह शायद पुराने संस्करण में एक बग या कमी थी।

0

"व्यवस्थापक"

 app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "Admin", 
       template: "api/{controller=Admin}"); 
     }); 
+0

काम नहीं करता है। दस्तावेज़ीकरण का कहना है कि यूआरएल पीढ़ी को छोड़कर मार्ग का नाम महत्वपूर्ण नहीं है। –

2

दो बातें करने के लिए नाम सेट करके देखें।

सबसे पहले, सम्मेलन-आधारित रूटिंग का उपयोग करते समय, अधिक विशिष्ट मार्गों को रूट विवादों से बचने के लिए अधिक सामान्य मार्गों से पहले आना चाहिए।

app.UseMvc(routes => 
{ 
    routes.MapRoute(name: "api", template: "api/{controller=Admin}"); 
    routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}"); 
}); 

दूसरे, आप पहले से ही नियंत्रक पर विशेषता routeing उपयोग कर रहे हैं तो तथ्य यह है कि आपको लगता है कि स्वीकार करेंगे नियंत्रक पर एक मार्ग टेम्पलेट की जरूरत नहीं है के अलावा नियंत्रक के लिए रास्ते में करने में सक्षम होना चाहिए /api/{Controller}

कि एक डिफ़ॉल्ट रूट

[Route("api/[controller]")] 
public class AdminController : Controller { 

    [HttpGet("")] //Matches GET api/admin <-- Would also work with [HttpGet] 
    public IActionResult Get() { 
     return Ok(); 
    } 

    [HttpGet("{id}")] //Matches GET api/admin/5 
    public IActionResult Get(int id) { 
     return Ok("value"); 
    }  

    //...other code removed for brevity 
} 
+0

मेरा पहला इरादा ऐप में मार्गों को छूना नहीं था। यूएसएमवीसी। हालांकि, बॉक्स से बाहर, यह काम नहीं करता है। [मार्ग ("एपीआई/[नियंत्रक]")] पर्याप्त नहीं है। मैंने आपके सुझाव का पालन किया और जेनेरिक से पहले, जैसा ऊपर बताया गया है, विशिष्ट मार्ग जोड़ा। अगर मैं https: // localhost पर नेविगेट करने का प्रयास करता हूं: 278 9 1/एपीआई/एडमिन यह अभी भी काम नहीं करता है। हैरानी की बात है, अगर मैं https: // localhost पर जाता हूं: 278 9 1/[WHATEVER] यह AdminController में Get() विधि को ट्रिगर करता है और [WHATEVER] को तर्क के रूप में पास करता है। यह वास्तव में अजीब है। –

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