2012-04-26 12 views
11

पृष्ठभूमि:एमवीसी 4 वेब एपीआई में [बाइंड (उपसर्ग = "प्रिंसिपल आईडी") समतुल्य?

MVC3 में, मैं निम्नलिखित वाक्य रचना कस्टम Action पैरामीटर नाम निर्दिष्ट करने के लिए उपयोग किया है:

public ActionResult ActionName([Bind(Prefix = "principalID")] int userID, 
           [Bind(Prefix = "dependentID")] long applicationID) 

इस कार्रवाई के लिए मार्ग का अनुसरण करता के रूप में परिभाषित किया गया था (ActionNameConstraint एक कस्टम IRouteConstraint है) :

routes.MapHttpRoute(
    "DependantAction", 
    "{controller}/{principalID}/{action}/{dependentID}", 
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance, dependentID = RouteParameter.Optional} 
    ); 

प्रश्न:

BindAttributeSystem.Web.Mvc कक्षा है। क्या वेब एपी में इसके बराबर (पैरामीटर बाध्यकारी) है?

बेशक, यदि एक ही परिणाम प्राप्त करने के लिए अन्य समाधान हैं, तो मुझे उन्हें सुनना अच्छा लगेगा!

उत्तर

-2

मैं समझता हूं कि वेबएपीआई में आप केवल विशेष नियंत्रक वर्ग आधार और विशेष कार्य नामों का उपयोग करते हैं, लेकिन फिर भी वे सभी नियंत्रक और क्रियाएं हैं।

क्या आपने इसे आजमाया और यह काम नहीं किया? इस लेख पर एक त्वरित दृष्टि मॉडल सामान्य रूप में बाध्यकारी नहीं है (विशिष्ट विशेषता हालांकि) का सुझाव लगता है सामान्य रूप से काम करना चाहिए:

http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

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

कुछ लोग कहते हैं यह MVC के साथ काम करना चाहिए केवल और जवाब नीचे गिरा दिया। यहां आपको अधिक संदर्भ:

+0

मैंने वास्तव में उस लेख की समीक्षा की है, यह वास्तव में एक ही इरादे को नहीं दबाता है - लेख मुख्य रूप से मॉडल बाध्यकारी को कवर करता है (मेरी अधिकांश खोजों ने वास्तव में मॉडल बाध्यकारी के परिणामस्वरूप परिणाम प्राप्त किए हैं) – diaho

+1

एएसपी.नेट वेब एपीआई नहीं है में निर्मित 'BindAttribute' कार्यक्षमता है। क्रिया पैरामीटर बाइंडिंग को मेरे मॉडल बाध्यकारी और वेब एपीआई की स्वरूपण सुविधा दी गई है। तो, यह सिर्फ मॉडल बाइंडर्स नहीं है। यहां एक और युक्ति यह है कि: ASP.NET वेब एपीआई के साथ 'System.Web.Mvc' नेमस्पेस के तहत कुछ भी उपयोग न करें।99% समय, यदि आप ऐसा करते हैं तो आपको परेशानी होगी। – tugberk

+0

अद्यतन उत्तर की जांच करें। – Meligy

5

आप पैरामीटर मॉडल बंधन के लिए उपयोग होने वाले नाम निर्दिष्ट करने के लिए System.Web.Http.FromUriAttribute विशेषता का उपयोग कर सकते हैं।

public ActionResult ActionName(
        [FromUri(Name = "principalID.userID")] int userID, 
        [FromUri(Name= "dependentID.applicationID")] long applicationID 
        ) 

FromUri मॉडल बताता क्वेरी स्ट्रिंग और अनुरोध के लिए RouteData जांच करने के लिए बाध्य है।

+1

दुर्भाग्यवश, यह विधि केवल समावेशन के लिए काम करती है। यदि आप बहिष्करण निर्दिष्ट करना चाहते हैं, तो आप स्वयं ही हैं। –