2012-04-19 20 views
5

में डिफ़ॉल्ट पैरामीटर मान मैं उत्सुक हूं कि एपीकंट्रोलर 'नियमित' नियंत्रक से अलग-अलग कार्यों पर डिफ़ॉल्ट पैरामीटर मानों को क्यों संभालता है।एमवीसी 4 वेब एपीआई

इस कोड को बस ठीक काम करता है, अनुरोध करने के लिए/टेस्ट पेज मूल्य हो जाता है 1

public class TestController : Controller 
{ 
    public ActionResult Index(int page = 1) 
    { 
     return View(page); 
    } 
} 

जब एक अनुरोध/API/मान लिए किया जाता है यह कोड काम नहीं करता है मतलब है। यह विफल रहता है:

"पैरामीटर शब्दकोश में विधि 'सिस्टम के लिए गैर-शून्य प्रकार' System.Int32 'के पैरामीटर' पेज 'के लिए एक शून्य प्रविष्टि है। Colections.Generic.IEnumerable`1 [System.String] प्राप्त करें (Int32) 'में' MvcAplication1.Controllers.Controllers.ValuesController '। एक वैकल्पिक पैरामीटर एक संदर्भ प्रकार, एक शून्य प्रकार होना चाहिए, या एक वैकल्पिक पैरामीटर के रूप में घोषित किया जाना चाहिए। "

public class ValuesController : ApiController 
{ 
    public IEnumerable<string> Get(int page = 1) 
    { 
     return new string[] { page.ToString() }; 
    }  
} 

इस पर कोई संकेत क्यों है?

उत्तर

5

कोशिश [FromUri] या [FromForm] पैरामीटर विशेषता जोड़ने।

public class ValuesController : ApiController 
{ 
    public IEnumerable<string> Get([FromUri]int page = 1) 
    { 
     return new string[] { page.ToString() }; 
    }  
} 

माइक स्टाल पैरामीटर WebAPI में बाध्यकारी जो के रूप में यह एएसपी MVC में करता है काम नहीं करता है के बारे में दो अच्छा पोस्ट नहीं है। उपयोग करने के लिए बड़ी समस्या यह है कि आप केवल अपनी पाइपलाइन में अनुरोध निकाय को पढ़ सकते हैं। इसलिए यदि आपको पैरामीटर के रूप में 1 से अधिक जटिल ऑब्जेक्ट को पढ़ने की आवश्यकता है, तो आपको शायद पैरामीटर द्वारा ModelBinding का सहारा लेना होगा। जब मैं लॉगिंग उद्देश्यों के लिए पहले पाइपलाइन में सामग्री निकाय पढ़ रहा था तब मुझे आपकी तरह की समस्या थी और उपरोक्त प्रतिबंध को पढ़ने के बारे में मुझे एहसास नहीं हुआ और मुझे अपने स्वयं के कस्टम मॉडल बाइंडर के साथ हल करना पड़ा।

मॉडल http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx पर बाध्यकारी की व्याख्या करता है और उसके बाद वेबएपीआई मॉडल एएसपी MVC http://blogs.msdn.com/b/jmstall/archive/2012/04/18/mvc-style-parameter-binding-for-webapi.aspx की तरह अधिक बाध्यकारी

+0

धन्यवाद, इन ब्लॉग पोस्ट को पढ़ा जाएगा, उम्मीद है कि चीजों को साफ़ कर देगा। –

+0

ऐसा लगता है कि यह [FromUri] आजकल है! – Olaj

0

Nullable<T> के रूप में परिभाषित करने का प्रयास करें:

public class ValuesController : ApiController 
{ 
    public IEnumerable<string> Get(int? page = 1) 
    { 
     return new string[] { page.ToString() }; 
    }  
} 
+0

मैं एक समान तरीके से इसे हल किया बनाने के लिए एक तरह से पता चलता है। मैं यहां एक कामकाज की तलाश नहीं कर रहा था, मैं जानना चाहता था कि दो नियंत्रक प्रकारों के बीच व्यवहार अलग क्यों था। हालांकि उत्तर के लिए धन्यवाद। –

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