दिलचस्प पोस्ट
एकाधिक INNER SQL एक्सेस में शामिल हों साधारण स्पष्टीकरण PHP OOP बनाम प्रक्रियात्मक? इंटरनेट पर सबसे सुरक्षित यूडीपी पैकेट साइज़ क्या है पायथन में एक सरणी को कैसे घोषित करना है? कैसे एक HTML लिंक के माध्यम से एसएमएस शरीर पाठ को पूर्व में पॉप्युलेट करने के लिए मैं str और int वस्तुओं को कैसे जोड़ सकता हूं? एक्सेल रेंज से एक-आयामी सरणी एंड्रॉइड: चेकबॉक्स का सेट रंग सिम्फनी 2 में कैश कैसे करें? सी # नई टी बनाएं () JSON-LD Schema.org: एकाधिक वीडियो / छवि पृष्ठ कई-से-कई पुनरावर्ती रिश्तेिंग कोड को आत्म-संदर्भित करने वाला पहला इकाई फ़्रेमवर्क पीएचपी में html को कन्वर्ट करें। डॉक करें JSlint: 'के लिए' अप्रत्याशित ' एकाधिक विरासत के साथ सटीक समस्या क्या है?

वर्तमान में वेब एपीआई के साथ आंशिक अपडेट करने का सुझाव क्या है?

मैं सोच रहा हूं कि आंशिक अपडेट को एएसपी.नेट वेब एपीआई के शांत इंटरफ़ेस के साथ कैसे कार्यान्वित किया जाए? मान लीजिए उदाहरण के लिए हम निम्नलिखित संरचना के तार पर ऑब्जेक्ट पास कर रहे हैं:

public class Person { public int Id { get; set; } public string Username { get; set; } public string Email { get; set; } } 

एक समय में किसी Person के कुछ हिस्सों को अपडेट करने का समर्थन कैसे करेगा, उदाहरण के लिए Email संपत्ति? क्या यह ओडाटा और पैच क्रिया के माध्यम से कार्यान्वित करने के लिए सिफारिश की गई है, या क्या यह अपने आप को लागू करने के लिए बेहतर होगा?

वेब के समाधान से एकत्रित समाधान "वर्तमान में वेब एपीआई के साथ आंशिक अपडेट करने का सुझाव क्या है?"

वेब एपीआई (अगस्त 2012 से) की वर्तमान नवीनतम स्थिर रिलीज में कोई समर्थन नहीं है इसलिए यदि आप उपयोग करना चाहते हैं तो वेब एपीआई आरटीएम है, तो आप को पूरी तरह से पाइपलाइन को लागू करना होगा।

इसके साथ ही, ओडेटा प्रीरेलेज पैकेज, नए Delta<T> ऑब्जेक्ट के माध्यम से आंशिक अपडेट का समर्थन करता है। वर्तमान में Microsoft.AspNet.WebApi.OData पैकेज पहले से ही आर सी संस्करण पर है (0.3) और यहां से प्राप्त किया जा सकता है: http://www.nuget.org/packages/Microsoft.AspNet.WebApi.OData

एक बार जब आप इसे स्थापित करते हैं, तब आप उस तदनुसार उपयोग कर सकते हैं:

 [AcceptVerbs("PATCH")] public void Patch(int id, Delta<Person> person) { var personFromDb = _personRepository.Get(id); person.Patch(personFromDb); _personRepository.Save(); } 

और आप इसे इस तरह से ग्राहक से कहते हैं:

 $.ajax({ url: 'api/person/1', type: 'PATCH', data: JSON.stringify(obj), dataType: 'json', contentType: 'application/json', success: function(callback) { //handle errors, do stuff yada yada yada } }); 

इस का स्पष्ट लाभ यह है कि यह किसी भी संपत्ति के लिए काम करता है, और आपको परवाह नहीं है कि क्या आप Email या Username या whatnot को अपडेट करते हैं

आप इस पोस्ट की जांच भी कर सकते हैं, क्योंकि यह एक बहुत ही समान तकनीक दिखाती है http://techbrij.com/http-patch-request-asp-net-webapi

संपादित करें (अधिक जानकारी): सिर्फ पैच का उपयोग करने के लिए, आपको ओडाटा से संबंधित कुछ भी सक्षम करने की आवश्यकता नहीं है, Delta<TEntityType> पैकेज को जोड़ने के अलावा – Delta<TEntityType> ऑब्जेक्ट तक पहुंच प्राप्त करने के लिए

आप ऐसा कर सकते हैं:

 public class ValuesController : ApiController { private static List<Item> items = new List<Item> {new Item {Id = 1, Age = 1, Name = "Abc"}, new Item {Id = 2, Age = 10, Name = "Def"}, new Item {Id = 3, Age = 100, Name = "Ghj"}}; public Item Get(int id) { return items.Find(i => i.Id == id); } [AcceptVerbs("PATCH")] public void Patch(int id, Delta<Item> item) { var itemDb = items.Find(i => i.Id == id); item.Patch(itemDb); } } 

यदि आपकी वस्तु है, तो कहें:

 { "Id": 3, "Name": "hello", "Age": 100 } 

आप पीटीसी को /api/values/3 साथ:

 { "Name": "changed!" } 

और वह आपके ऑब्जेक्ट को ठीक से अपडेट कर देगा।

Delta<TEntity> आपके लिए हुए बदलावों का ट्रैक रखेगा यह एक गतिशील वर्ग है जो आपके प्रकार के लिए हल्के प्रॉक्सी के रूप में कार्य करता है और मूल ऑब्जेक्ट (यानी डीबी से) और क्लाइंट द्वारा पास किए गए अंतर के बीच अंतर को समझ जाएगा।

यह आपके एपीआई के बाकी हिस्सों को किसी भी तरह प्रभावित नहीं करेगा (ओडीटा पैकेज निर्भरता को सुविधाजनक बनाने के लिए नए लोगों के साथ DLL को बदलकर पाठ्यक्रम को छोड़कर)

मैंने पैच + डेल्टा के काम को प्रदर्शित करने के लिए एक नमूना प्रोजेक्ट जोड़ा है – आप इसे यहां ले जा सकते हैं (यह एसएस वीएस2012) https://www.dropbox.com/s/hq7wt3a2w84egbh/MvcApplication3.zip