Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ò»¸öʱ÷ֵĵ¥Ò³³ÌÐò
 
×÷ÕߣºÌÚ·É À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-7-23
  3561  次浏览      27
 

Ò²Ðíµ¥Ò³³ÌÐò(Single Page Application)²¢²»ÊÇʲôʱ÷ÖµÄÍæÒ⣬ÏñGmailÔÚºÜÔç֮ǰ¾ÍÒѾ­ÔÚʹÓÃÕâÖÖģʽ¡£Í¨³£µÄ˵·¨ÊÇËüͨ¹ý±ÜÃâÒ³ÃæË¢Ð´ó´óÌá¸ßÁËÍøÕ¾µÄÏìÓ¦ÐÔ£¬Ïñ²Ù×÷×ÀÃæÓ¦ÓóÌÐòÒ»Ñù¡£ÌرðÊÇÔÚµ±½ñµÄÒÆ¶¯Ê±´ú£¬µ¥Ò³³ÌÐòÈç¹û·ÅÔÚÒÆ¶¯É豸ÉÏÈ¥ä¯ÀÀ¾ÍÄܹ»ÓµÓÐÏñnative appÒ»ÑùµÄÌåÑ飬ҲÐíÎÒÃÇweb¿ª·¢ÕßÃÇÓ¦¸ÃÆÚ´ýÕâÖÖ¼¼ÊõµÄ´óÁ¦ÆÕ¼°£¬ÕâÑù²»¹Üǰ¶Ë»¹ÊǺó¶Ë¶¼ÊÇÎÒÃǵÄÌìϰ¡£¬ÈÃÄÇЩAndrioidºÍIOS¿ª·¢ÕßÃÇ×·¸ÏÎÒÃǰɣ¡ºÃ°É£¬·Ï»°²»ËµÁË£¬ÎÒÃÇ»á´Ó0¿ªÊ¼´î½¨ÕâÑùÒ»¸öµ¥Ò³µÄwebÕ¾µã£¬²¢ÇÒ»áÏò´ó¼ÒչʾÎÒÃDZêÌâËùÁеÄÕâЩ¿ªÔ´¿ò¼ÜÊÇÈçºÎ°ïÖúÎÒÃÇ¿ìËÙ¹¹½¨µÄ¡£Ð¼¼Êõ±È½Ï¶à£¬ÎÒÒ²ÊÇѧϰ£¬Óв»×ãµÄµØ·½Ç뺣º­ :)

ÐèÇó½éÉÜ

ÎÒÃǵÄÐèÇóºÜ¼òµ¥£¬Í¨¹ýÕâ¸öµ¥Ò³³ÌÐòÍê³É¶ÔEventµÄ¹ÜÀí£¬ÏÂÃæ¼òµ¥Áм¸ÌõÐèÇó¡£

¹¦ÄÜÐÔÐèÇó

1.Ìí¼ÓÐÞ¸ÄEvent

2.Event ÓÐopeningºÍclosedµÄ״̬£¬Ò²¾ÍÊÇÐèÒªÓйرÕEventµÄ¹¦ÄÜ

3.EventÁбíÒ³¿ÉÒÔ¸ù¾Ý״̬¹ýÂË

4.ClosedµÄEvent²»ÄÜÔÙ½øÐÐÐÞ¸Ä

·Ç¹¦ÄÜÐÔÐèÇó

1.¾¡¿ÉÄܵļõÉÙ¶Ô·þÎñÆ÷µÄÇëÇó

2.Êý¾ÝÍêÕûÐÔ(ÑéÖ¤)

3.ÈÏÖ¤ºÍÊÚȨ(ϵͳ»áÓÐÖÁÉÙ2ÖÖ½ÇÉ«£¬²¢ÇÒÓµÓв»Í¬µÄȨÏÞ)

4.¿Éά»¤ÐÔ

ÈÏÖ¤ºÍÊÚȨÕâÒ»¿éÔÝʱûÓÐ×ö£¬ºóÃæ¿ÉÒÔ¼ÌÐøÍêÉÆ£¬ÑéÖ¤ÕâÒ»¿éÖ»×öÁ˺ó¶ËµÄ£¬Í¨³£ÎªÁ˰²È«ºÍÓû§ÌåÑéÊÇÐèÒªºó¶ËºÍǰ¶Ë¶¼ÒªÊµÏÖÑéÖ¤µÄ¡£Õâ¸öDemoÎÒÒѾ­ÉÏ´«µ½Windows AzureÉÏÈ¥ÁË£¬´ó¼ÒÀ´ÌåÑéÒ»°Ñ¡£http://myspademo.cloudapp.net

µ¥Ò³³ÌÐò½éÉÜ

Ê×ÏÈÎÒ¾õµÃ¿ÉÒÔ°ÑÒ³ÃæµÄÏìӦģʽ·Ö³ÉÕâÑù´ó¸Å3¸ö½×¶Î£º

1. ×ͳµÄ½×¶Î£ºÊ²Ã´¶¼µÃË¢ÐÂ

×ͳµÄwebÕ¾µãÖУ¬¿Í»§¶ËÏò·þÎñÆ÷·¢ËÍÇëÇ󣬷þÎñÆ÷ÏìÓ¦Ö®ºó°ÑÉú³ÉºÃµÄHTMLͨ¹ýResponse·µ»Ø¸ø¿Í»§¶Ë£¬ÕâÑùÒ»À´Ò»Íù¡£ÌåÑ鵱ȻÊÇ×î²»ºÃµÄ£¬Í¬Ê±¶Ô·þÎñÆ÷À´ËµÒ²ÐèÒª´¦ÀíµÄ¸ü¶à¡£

2. Ò³Ãæ¾Ö²¿Ë¢ÐÂ

ÖÁ´ÓAjax»ðÆðÀ´Ö®ºó£¬´ó¼Ò¾ÍÏëÆðÁËÕâÒ»µã¡£Ò³ÃæÄ³Ò»¿é¾Ö²¿µÄÊý¾Ý¿ÉÒÔÔÚÒ³ÃæÔÚ¿Í»§¶Ë¼ÓÔØÍêÖ®ºó£¬ÔÙ´Óз¢ÆðÒ»¸öÇëÇóÈ¥°Ñijһ¿éµÄHTML´úÂëÔÙÄÃÏÂÀ´ÏÔʾµ½Ò³ÃæÖС£ÕâÀïÃæÓÐÁ½ÖÖ×ö·¨£¬Ò»ÖÖÊǺǫֱ́½Ó°ÑHTMLÉú³ÉºÃÁËÖ±½Ó·µ»Ø£¬ÁíÒ»ÖÖ×ö·¨ÊÇ·þÎñÆ÷Ö»·µ»ØÊý¾Ý£¬¿Í»§¶ËÔÙÆ´³öHTML¡£²ÉÈ¡µÚ¶þÖÖ×ö·¨µÄʱºò£¬ÓÐÈË¿ÉÄÜÒѾ­ÓÃÉÏÁËÏȽøµÄÄ£°å¼¼Êõ£¬ÓÐÈË¿ÉÄÜ»¹ÔÚʹÓÃÇ¿´óµÄ×Ö·û´®Æ´½Ó¼¼Êõ¡£ ²»¹ÜÔõô˵£¬ÎÒÃǽø²½ÁË£¬Óû§¿ÉÒÔÏÈ¿´µ½Ò³Ã棬Ȼºóijһ¿éÂýÂý¼ÓÔØ£¬Óû§¸Ð¾õˬÁË£¬ÔÙÒ²²»ÊÇһƬ¿Õ°×ÔÚÄÇÀïת°¡×ª°¡µÄÁË¡£

3. ÕûÕ¾µ¥Ò³

ÕûÕ¾µ¥Ò³µÄʱ´úµ½À´×îÔçÊÇÔÚ2005Ä꣬µ±È»ÄÇʱºò»¹Ö»ÊÇÒ»¸öÊõÓï¡£¾ßÌåµÄÀý×Ó£¬ÎÒ×îÔç½Ó´¥µ½µÄÊÇGmail£¬µ±È»×î¼òµ¥µÄµ¥Ò³ÆäʵºÜ¼òµ¥±ÈÈç˵ijQÓÊÏ䣬ÕûÁ˸öFrameÔÚÒ³ÃæÀïÃæ£¬²»¹ÜÄãÔõôµã£¬ËüÀÁÊǸоõûÓÐË¢ÐÂѽ¡£ÕâÀïÏȼòµ¥ËµËµÎÒÃÇҪʵÏÖµÄÕâ¸öµ¥Ò³ºÍÓÃFrameʵÏֵĵ¥Ò³Ïà±ÈÓÐʲôÓÅÊÆ¡£

ÓµÓÐÁ¼ºÃ¶¨ÒåµÄURL£¬¶ÔÓû§ºÍËÑË÷ÒýÇæ¶¼¸üÓѺá£

¿ÉÒÔʵÏÖÏνӶ¯»­£¬ÕâÒ»µãÔÚÒÆ¶¯É豸ÉÏÌØ±ðÖØÒª¡£

Ò³ÃæÉúÃüÖÜÆÚ¶Ô±È

ÕâÀï´ÓMSDNÉÏÃæ°ÇÀ´ÁËÒ»ÕÅͼ£¬ÉÏÃæµÄ´«Í³µÄÒ³ÃæÉúÃüÖÜÆÚ£¬ÏÂÃæÊÇÎÒÃÇÕâÖÖµ¥Ò³³ÌÐòÒ³ÃæµÄÉúÃüÖÜÆÚ¡£ÎÒÃÇÀ´¿´¿´ÕâÖÖģʽµÄÒ³Ãæ»áΪÎÒÃǵÄÓû§ºÍ¿ª·¢Õß´øÀ´ÄÄЩÓÅÊÆºÍÄÑÌâ¡£

ÓÅÊÆ

¶ÔÓÚÓû§¶øÑÔ£¬¸üºÃµÄÓû§ÌåÑé£¬ÌØ±ðÌåÏÖÔÚ¿ÉÒÆ¶¯¶ËºÍ¿É´¥ÃþÉ豸ÉÏ

¶ÔÓÚ¿ª·¢¶¼Õß¶øÑÔ£¬ÔÚ¶¨ÒåÁËÁ¼ºÃµÄ·Ö²ã¼Ü¹¹Ö®ºó£¬UIÓëÊý¾Ý¿ÉÒÔÍêÈ«·ÖÀ룬ֻҪºǫ́µÄÊý¾Ý½Ó¿Ú²»¸Ä±ä£¬ºǫ́µÄÂß¼­¿ÉÒÔËæÒâµÄ¸Ä¶¯Ò³²»Ó°Ïìǰ¶Ëչʾ£¬¶øÔÚ¼ÓÉÏǰ¶ËMVVM¿ò¼ÜÖ®ºó£¬ÎÒÃÇǰ¶ËµÄÊý¾ÝÒ²¿ÉÒÔÓëUIÍê³É·ÖÀë¡£

ÄÑÌâ

×î´óµÄÄÑÌâÊÇJavascript²¿·Ö£¬ÓÉÓÚÈ«²¿ÔÚÒ»¸öÒ³Ãæ£¬ÎÒÃÇÐèÒª´¦Àí±äÁ¿¸²¸Ç£¬±äÁ¿×÷ÓÃÓò£¬¶ÔÓÚǰ¶Ë¿ª·¢ÈËÔ±À´ËµÒªÇó»á¸üÉÏÒ»²ãÂ¥

¶ÔÓÚÈ«Çò»¯£¬ÊÚȨµÈÄ£¿é¶¼ÐèÒªÖØÐ¿¼ÂǺÍÉè¼ÆÒÔ±ã¸üÊʺÏÕâÖÖµ¥Ò³³ÌÐòµÄ¿ª·¢

ÏîÄ¿¼Ü¹¹

°ÇÁËÒ»ÕÅͼ֮ºó£¬ÎÒµÄͼ¾ÍµÃ»­µÄ¸úËüµÄЭµ÷£¬Ã»ÓÐÎÒµÄÊÖд·ç¸ñºÃ¿´£¬ÓÐľÓУ¿

ÓÃKnockout×÷ǰ¶ËMVVM¿ò¼Ü

ÓÃrequireJSÀ´¼ÓÔØÔ¶³ÌÄ£°å

ÓÃdirectorÀ´×÷ǰ¶Ëroute

modelÊý¾ÝÊÇÖ±½ÓºÍweb api½»»¥µÄ£¬°üÀ¨ÑéÖ¤ºÍÊÚȨ

Ä£°åÊÇÒ»¸öController£¬Ã¿Ò»¸öÄ£°å¶ÔÓ¦Ò»¸öAction

View Container

ÕâÊÇÒ»¸ö¿Í»§¶ËµÄÄ£°åÈÝÆ÷£¬ÔÚrequireJSµÄ»ù´¡·â×°ÁËһϣ¬µÚÒ»´Îµ÷ÓÃij¸öÄ£°åµÄʱºò»áÈ¥·þÎñÆ÷ÉÏÄ㬺óÀ´¾ÍÖ±½ÓÓÿͻ§¶ËµÄÁË¡£

Ϊʲôģ°å²»Ö±½ÓÓÃhtmlµÄ£¿

Õâ¸öÎÊÌâÎÒÒ²Ïë¹ý£¬Óô¿htmlµÄ¾Í²»±Ø×ßmvcÄÇÒ»Ì×ÉúÃüÖÜÆÚÁË£¬·þÎñÆ÷ѹÁ¦¼õÉÙ²»Ð¡¡£µ«ÊÇ¿¼Âǵ½ÎÒÃÇviewµ±ÖеÄÊÚȨģ¿éºÍÈ«Çò»¯×ÊÔ´£¬ÆäʵÊÇ¿ÉÒÔÖ±½ÓÔÚ·þÎñÆ÷¶Ë´¦ÀíºÃÔÙ·µ»ØµÄ¡£¶øÇÒÎÒҲ͵ÁËÒ»¸öÀÁ£¬Ã»ÓаÑÕâЩ·ÅÔÚ¿Í»§È¥ÊµÏÖ£¬´ó¼ÒÓкõĵã×Ó¿ÉÒÔ·ÖÏíµÄô£¿

¿ªÔ´¿ò¼Ü½éÉÜ

ÉÏÃæÓÃÁËÕâô¶àµÄ¿ªÔ´¿ò¼Ü£¬ÄÇôËüÃǶ¼ÊǸÉʲôµÄ£¬ÓÖÊÇÈçºÎʹÓõÄÄØ£¿ ÕâÀïÎÒÃǾÍССµÄÀ´ÁÄÒ»ÁÄÕâЩ¿ªÔ´µÄ¿ò¼Ü°É¡£

Bootstrap

ÕâÍæÒâÎÒÏëºÜ¶àÈ˶¼ÖªµÀ£¬ÎҾͲ»¶à˵ÁË¡£ÓÐÁËËüÖ®ºó£¬ÎÒÃdzÌÐòÔ±²»ÐèÒªÃÀ¹¤Ò²¿ÉÒÔ×ö³öºÜƯÁÁµÄ½çÃæÁË£¬ËäÈ»ÎÒÕâ¸öDemoûÓкܺÿ´£¬µ«ÒªÊÇûÓÐËüÄÇ»¹Õæ²»ÖªµÀÒª³óÉ϶àÉÙ±¶¡£Ëü»¹ÓÐÖÐÎİæµÄÕ¾µã£º http://www.bootcss.com/

director.js

ÕâÊÇÒ»¸öǰ¶ËµÄroute¿ò¼Ü£¬Ê²Ã´½Ðǰ¶ËrouteÄØ£¿´ó¼ÒÈç¹ûÈ¥¿´ÎÒµÄÄǸöDemo¾Í»á·¢ÏÖ£¬URL²¢²»ÊÇÏñijQÓÊÏäÄÇÑùÒ»Ö±²»±äµÄ£¬ÎÒÃÇ»¹ÊÇ¿ÉÒÔÏñÒÔǰÄÇÑùÿһ¸öµ¥Ò»µÄ¹¦ÄÜÒ»¸öURL¡£±ÈÈç˵£º

?#/events/create
?#/events/all
?#/events/closed
?#/events/1

³ýÁ˶ÔÓû§±È½ÏÓѺÃÖ®ºó£¬Ð´´úÂëµÄʱºòÒ²»á¸ü¼ÓÂß¼­ÇåÎú£¬ÒòΪdirector»áΪÿһ¸öurl°ó¶¨Ò»¸öº¯Êý£¬¾ÍÏñmvcÀïÃæµÄactionÒ»Ñù¡£µ±Óû§ÊäÈë¶ÔÓ¦µÄurlµÄʱºò£¬ÏàÓ¦µÄº¯Êý¾Í»á±»´¥·¢¡£

ÏÂÃæÊÇÀ´×Ô¹Ù·½Ê×Ò³µÄÒ»¸öССµÄÀý×Ó£¬ÈÃÄãÒ»Ñ۾ͻáÓÃdirector¡£

requireJS

ÕâÍæÒâÎÒÒ²²»Óöà½éÉÜÁ˰ɣ¬Ëü¾ßÓÐÑÓ³Ù¼ÓÔØºÍ±ÜÃâÖØ¸´¼ÓÔØµÄ¹¦ÄÜ£¬À´×Ô¹Ù·½µÄ¶¨Òå: requireJSÊÇÒ»¸öJavaScriptÎļþºÍÄ£¿é¼ÓÔØÆ÷¡£

knockout.js

ÕâÍæÒâ¾ÍËãÎÒÏë¸øÄã½éÉÜÒ²²»ÊÇÈýÑÔÁ½Óï¾ÍÄÜ˵µÄÇåµÄ£¬¾ßÌåÄú»¹ÊDzο¼Ô´Âë°É¡£»òÕßÔ°×ÓÀïÃæµÄ´óÊåÔø¾­·­ÒëÁ˹ٷ½µÄÒ»¸ö½Ì³Ì£¬ÓÐÐËȤͬѧ¿ÉÒÔ¿´¿´¡£ ×ÜÖ®ËüÊÇÒ»¸öJavaScriptµÄMVVM¿ò¼Ü£¬µ±È»ÕâÖÖ¿ò¼ÜÓкܶ࣬backboneJS, breezeJS, Durandal,EmberJS,Angular µÈµÈ£¬ÎÒ²¢Ã»ÓÐÈ«²¿Á˽â¹ý£¬ËùÒÔÎÒÒ²²»ÄܸæËßÄãËûÃǵÄÓÅÊÆºÍȱµã·Ö±ðÔÚÄÄÀѡÔñknockout.jsÊÇÒòΪ֮ǰÁ˽â¹ý£¬ºÃÉÏÊÖ£¬È»ºóÒÔÉÏÕâ3ÖÖ¿ªÔ´µÄ¿ò¼ÜÈ«ÊÇ»ùÓÚMIT¿ªÔ´Ð­ÒéµÄ£¬ÕâÑùÎÒÃǾͿÉÒÔÓÃËü×öÉÌÒµ¿ª·¢ÁË¡£

ÓÃrequireJSʵÏÖÔ¶³ÌÄ£°åµÄµ÷ÓÃ

Ö±½ÓÓÃrequireÀ´¼ÓÔØhtmlÄ£°åÊDz»Ðеģ¬È˼ÒÒѾ­ËµÁËÊÇÒ»¸öJavascriptÎļþºÍÄ£¿éµÄ¼ÓÔØÆ÷¡£ËùÒÔÕâÀïÃæÎÒÃÇÐèÒªÓõ½requireJSµÄÎı¾²å¼þ£¬ÕâÑùÎÒÃǾͿÉÒÔÓÃËüÀ´¼ÓÔØÎı¾ÁË¡£https://github.com/requirejs/text

°ÑÄǸötext.jsÏÂÔØÏÂÀ´£¬Ö±½Ó·Åµ½ÎÒÃdzÌÐòµÄ¸ùĿ¼Ï£¬È»ºóÎÒÃǾͿÉÒÔÓÃÏñ¼ÓÔØjsÒ»ÑùµÄ·½·¨À´¼ÓÔØhtml´úÂëÁË£¬³ýÁËÒªÔÚÎÒÃÇÎļþλÖÃÇ°Ãæ¼ÓÉÏÒ»¸ötext! Ö®Íâ¡£


require(['text!/template/createevent'], function (template) {

// ÄãÔÚÕâÀï¾Í¿ÉÒÔÄõ½Ä£°åÁË¡£

})

restÖйØÓÚ¾Ö²¿¸üеÄÌÖÂÛ

ÎÒÃdz£ÓõÄhttp verbÓÐËÄÖÖ£º

ÎÒÃÇÓÃPUT·½Ê½È¥¸üÐµĻ°£¬Êǽ«Õû¸öModelÈ«²¿¸üС£µ±È»ÄãÒ²¿ÉÒÔ»»³ÉÏÂÃæÕâÖÖ·½Ê½£¬Ö»¸üÐÂÄãÏëÒª¸üеÄ×ֶΡ£


[HttpPut]

public void Put(Event item)

{

var newItem = new Event();

newItem.Id = item.Id;

// ÔÚÏÂÃæ½«ÄãÏëÒª¸üеÄֵתµ½newItemÏÂ

newItem.Title = item.Title;

if (!repository.Update(newItem))

{

throw new HttpResponseException(HttpStatusCode.NotFound);

}

}

×¢Ò⣺Put·½Ê½µÄURlÖ»ÓÐÒ»ÖÖ£¨ÔÚÎÒÃDz»½¨ÆäËürouteµÄÇé¿öÏ£©£¬Ò²¾ÍÊÇÎÒÃÇÉÏÃæÁгöÀ´µÄ /api/events/{id}£¬È»ºó½«event¶ÔÏó×÷Ϊbody´«¹ýÈ¥¡£±ÈÈç˵ÔÚÎÒÃǵÄdemoÖУ¬ÎÒÃÇÓиüвÙ×÷£¬»¹ÓÐÏñ¡°¹Ø±Õ¡±ÕâÑùµÄ²Ù×÷£¬ÎÒÏëÕâÑùµÄ²Ù×÷¼¸ºõÔÚÿһ¸öϵͳÀïÃæ¶¼»áÓöµ½£¬ÕâÑùµÄ²Ù×÷Ö»»á¸üÐÂÒ»¸ö×ֶΣ¨ÔÚÕâÀïÊÇ¡°×´Ì¬¡±ÁУ©¡£ ÄÇÎÒÔõôÑùÔÙ½¨Ò»¸öPut·½·¨È¥¸ü¸ÄÕâÒ»¸ö×Ö¶ÎÄØ£¿¶øÇÒ×îºÃµÄ·½·¨ÊÇÎÒÖ»Óô«id¹ýÈ¥¾Í¿ÉÒÔÁË¡£

ͨ¹ýgoogle£¬ÎÒÕÒµ½Ò»¸ö½ÐPatchµÄÍæÒ⣬ ËüÒ²ÊÇÒ»ÖÖhttp verb£¬²¢ÇÒͬÑùÒ²ÊÇÌṩ¸üвÙ×÷¡£µ«ÊÇÓëPut²»Ò»ÑùµÄÊÇPatchÔÊÐíÖ»½«ÄãÐèÒª¸ü¸ÄµÄ×ֶδ«µ½·þÎñÆ÷¶Ë¡£


var obj = { Revision : "2"};

$.ajax({

url: 'api/values/1',

type: 'PATCH',

data: JSON.stringify(obj),

dataType: 'json',

contentType: 'application/json',

success: function (data) {

}

});

µ«ÊDz»¹ÜÔõô˵£¬ÕâÖÖ·½Ê½ÎÒÊÇûÓÐÐÐͨµÄ£¬Ò»µ©ÎÒµÄʵÌå¶ÔÏó¼ÓÉÏһЩÑéÖ¤µÄAttribute±ÈÈç˵RequiredÖ®ºó£¬ÄÇЩ×Ö¶ÎÈ«¶¼»á±»¸³ÉÏĬÈÏÖµ¡£ ×îºóÎÒ²»µÃ²»·ÅÆúÁËÕâÖÖ×ö·¨¡£

Ìí¼ÓRouteÀ´´´½¨Á½¸öPUT·½·¨

ÁíÍâÒ»ÖÖ×ö·¨£¬Ò²¾ÍÊÇÎÒÃÇDemoÖÐʵÏÖµÄ×ö·¨ÊÇÔö¼ÓÁËÒ»¸öRoute£¬ÔÚÎÒÃǵÄweb apiÖÐʵÏÖÁËÁ½¸öputµÄ·½·¨¡£


[Route("api/events/{id}/close")]

public void Put(int id)

{

var item = repository.Get(id);

if (item == null)

{

throw new HttpResponseException(HttpStatusCode.NotFound);

}

item.Status = EventStatus.Closed;

if (!repository.Update(item))

{

throw new HttpResponseException(HttpStatusCode.NotFound);

}

}

ÕâÑùµ±ÎÒÓÃPUTµÄ·½Ê½Ìá½»µ½ api/events/3/close µÄʱºò£¬ÎÒÃǵÄweb api¾Í»áÖ´ÐÐÉÏÃæµÄ·½·¨È»ºó°ÑÎÒÃǵÄevent¹Ø±ÕÁË¡£

WEB APIµÄÑéÖ¤

»ù±¾ÉÏÈκÎϵͳ¶¼±ÜÃâ²»ÁËÓëÑéÖ¤´ò½»µÀ£¬³ý·ÇÄǸöϵͳѹ¸ù²»´ÓÓû§ÄÇÀï»ñÈ¡Êý¾Ý¡£WEB APIµÄÑéÖ¤·½Ê½´óÖÁÏàͬ£¬ÎÒÃÇÈԾɿÉÒÔÔÚÎÒÃǵÄModelÖвÉÓÃAttributeµÄ·½Ê½È¥ÉùÃ÷ÑéÖ¤Ìõ¼þ¡£


public class Event

{

public int Id { get; set; }

[Required]

[MinLength(10)]

public string Title { get; set; }

public string Description { get; set; }

public DateTime Start { get; set; }

public DateTime End { get; set; }

[Required]

public string Owner { get; set; }

public EventStatus Status { get; set; }

}

ÔÚapi·½·¨ÖÐÎÒÃÇÓÃModelState.IsValidÅжϾͿÉÒÔÁË¡£


public HttpResponseMessage Post(Event item)

{

if (ModelState.IsValid)

{

// ±£´æ²Ù×÷

return new HttpResponseMessage(HttpStatusCode.OK);

}

else

{

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);

}

}

ÓÃAOPµÄ·½Ê½È¥ÊµÏÖÑéÖ¤

»òÕßÎÒÃÇ¿ÉÒÔ»»³ÉÏÂÃæµÄÕâÖÖ·½Ê½£¬ÏÈ´´½¨Ò»¸öFilter¡£


public class ValidateModelAttribute : ActionFilterAttribute

{

public override void OnActionExecuting(HttpActionContext actionContext)

{

if (!actionContext.ModelState.IsValid)

{

actionContext.Response = actionContext.Request.CreateErrorResponse(

HttpStatusCode.BadRequest, actionContext.ModelState);

}

}

}

ÔÙµ½PostºÍPUTµÄ·½·¨ÉÏÃæ´òÉÏÕâ¸ö±êÇ©¡£


[HttpPut]

[ValidateModel]

public void Put(Event item)

{

if (!repository.Update(item))

{

throw new HttpResponseException(HttpStatusCode.NotFound);

}

}

ÎÒÃÇ»¹ÐèÒªÔÚÎÒÃǵÄWebApiConfigÖÐ×¢²áÕâ¸öFilter¡£


public static class WebApiConfig

{

public static void Register(HttpConfiguration config)

{

config.Filters.Add(new ValidateModelAttribute());

}

}

ǰ¶ËÄõ½Õâ¸öÏûÏ¢Ö®ºó£¬¾Í¿ÉÒÔ֪ͨ¸øÓû§ÁË¡£µ±È»×îºó»¹ÊÇÐèÒª¼ÓÉÏǰ¶ËÑéÖ¤£¬¿ÉÒÔ´ó´óµÄÌá¸ßÓû§ÌåÑéÒÔ¼°¼õÇá·þÎñÆ÷µÄѹÁ¦¡£

   
3561 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢