2015-08-24 11 views
5

में एपीआई नियंत्रक कॉल और नियंत्रक कॉल का संयोजन मैं एमवीसी 6 के साथ शुरू कर रहा हूं जिसमें पहले एपीआई कॉल और मानक नियंत्रक कॉल के लिए अलग नियंत्रक बनाए गए थे। एमवीसी 6 में अब कोई एपीकंट्रोलर क्लास नहीं है और उन कार्रवाइयों को आपके कंट्रोलर क्लास में शामिल किया जा सकता है।समान एमवीसी 6 नियंत्रक

तो यहां मेरे पास एक टीम कंट्रोलर है। जब मैं जावास्क्रिप्ट में एक पोस्ट प्राप्त पोस्ट के बजाय कहा जाता है बनाने के लिए और जब मैं फोन

[Route("Teams")] 
public ActionResult Teams() 

And then I have actions to return data : 

//GET : api/Teams 
[Route("api/Teams")] 
[HttpGet("GetAllTeams")] 
public IEnumerable<Team> GetAllTeams() 

//GET : api/Teams/5 
[Route("api/Teams/{teamId:int}")] 
[HttpGet("{teamId:int}", Name = "GetTeamById")] 
public IActionResult GetTeamById(int teamId) 

//GET : api/Teams/Chicago Bears 
[Route("api/Teams/{teamName}")] 
[HttpGet("{teamName}", Name = "GetTeamByName")] 
public IActionResult GetTeamByName(string teamName) 

//POST : api/Teams 
[Route("api/Teams/{team}")] 
[HttpPost("{team}", Name = "AddTeam")] 
public void AddTeam([FromBody]Team item) 

//PUT: api/Teams 
[Route("api/Teams/{team}")] 
[HttpPut("{team}", Name = "EditTeam")] 
public void EditTeam([FromBody]Team item) 

//DELETE : api/Teams/4 
[Route("api/Teams/{teamId:int}")] 
[HttpDelete("{teamId:int}", Name="DeleteTeam")] 
public IActionResult DeleteTeam(int id) 

मुझे यकीन है कि अगर मैं इन सही ढंग से कॉन्फ़िगर है नहीं कर रहा हूँ, उदाहरण के लिए के रूप में: मैं दृश्य वापस जाने के लिए एक कार्रवाई है GetByTeamId को कॉल करने के बजाय विधि हटाएं।

क्या कोई इस बारे में सलाह दे सकता है कि इन मार्गों को सर्वोत्तम तरीके से कैसे स्थापित किया जाना चाहिए?

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

var tAdd = new team(self.Id(), self.TeamName(), self.Logo()); 

        var dataObjectAdd = ko.toJSON(tAdd); 

        $.ajax({ 
         url: 'http://lovelyjubblymvc6.azurewebsites.net/api/Teams', 
         type: 'post', 
         data: dataObjectAdd, 
         contentType: 'application/json', 
         success: function (data) { 
          self.teams.push(new team(data.TeamId, data.TeamName, data.Logo)); 
          self.TeamName(''); 
          self.Logo(''); 
         }, 
         error: function (err) { 
          console.log(err); 
         } 
        }); 
+0

क्या आप हमें जावास्क्रिप्ट में पोस्ट दिखा सकते हैं? –

उत्तर

1

आप लगभग देखते हैं: यहाँ जावास्क्रिप्ट पोस्ट है।

AddTeam() विधि आपके कोड स्निपेट में एक जीईटी अनुरोध की अपेक्षा करता है, ताकि यह समझाया जा सके कि आपके द्वारा उल्लिखित पोस्ट का काम क्यों नहीं हुआ। लेकिन आप इस विधि को POST अनुरोध का जवाब देने के लिए चाहते हैं, न कि डेटा को बदलने के बाद से GET अनुरोध के लिए। जीईटी अनुरोध आमतौर पर यूआरएल क्वेरी पैरामीटर के साथ किए जाते हैं और इस तरह डेटा को बदलने के लिए यह थोड़ा खतरनाक है। विधि हस्ताक्षर की तरह होना चाहिए:

[Route("api/Teams/{team}")] 
[HttpGet("{team}", Name = "AddTeam")] 
public void AddTeam([FromBody]Team item) 

और भूल नहीं है, तो आप कॉल करना चाहते EditTeam() या DeleteTeam() आप अनुरोध क्रमशः

0

आप अपने नियंत्रक गुण में कुछ त्रुटियों एक PUT भेज सकते हैं या हटाना होगा ।

[Route("Teams")] 
public ActionResult Teams() 

And then I have actions to return data : 

//GET : api/Teams 
[HttpGet("api/Teams")] 
public IEnumerable<Team> GetAllTeams() 

//GET : api/Teams/5 
[HttpGet("api/Teams/{teamId:int}")] 
public IActionResult GetTeamById(int teamId) 

//GET : api/Teams/Chicago Bears 
[HttpGet("api/Teams/{teamName}")] 
public IActionResult GetTeamByName(string teamName) 

//POST : api/Teams 
[HttpPost("api/Teams/{team}")] 
public void AddTeam([FromBody]Team item) 

//PUT: api/Teams 
[HttpPut("api/Teams/{team}")] 
public void EditTeam([FromBody]Team item) 

//DELETE : api/Teams/4 
[HttpDelete("api/Teams/{teamId:int}")] 
public IActionResult DeleteTeam(int id) 

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

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