Ò²Ðíµ¥Ò³³ÌÐò(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());
}
} |

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