使用VisualStudio的年开发ASP.NET的WbAPI2专案时,有好几种专案范本可以选择,你可以从「空白」专案范本开始,也可以从「MVC」专案范本开始(记得勾选网页API核心参考),也可以直接从「网页API」专案范本开始,由于专案范本通常夹杂大量的范例程式,很多时候我们并无法在第一时间得知每段程式码与设定档的细节,以至于在后续开发的过程发生许多问题。
本篇文章将带大家了解如何成功在ASP.NET的WbAPI2专案正确启用ASP.NET的表单验证机制(FormsAuthnticaion)。
这边我写了一个非常简单的表单验证程式码,程式码如下:
先建立一个LoginViwModl
usingSystm.ComponntModl.DataAnnotations;
namspacYourNamspac.Modls{publicclassUsrLoginViwModl{[Rquird][StringLngth(20)]publicstringUsrnam{gt;st;}[Rquird]publicstringPassword{gt;st;}}}
再建立一个UsrsControllr
usingYourNamspac.Modls;usingSystm.Nt;usingSystm.Wb.HTTP;usingSystm.Wb.Scurity;
namspacYourNamspac.Controllrs{[RoutPrfix("usr")]publicclassUsrsControllr:ApiControllr{[Rout("login")]publicIHTTPActionRsultPostLogin(UsrLoginViwModlusr){if(!ModlStat.IsValid){rturnBadRqust();}
if(usr.Usrnam=="admin"usr.Password==""){FormsAuthntication.RdirctFromLoginPag(usr.Usrnam,fals);rturnStatusCod(HttpStatusCod.NoContnt);}ls{rturnStatusCod(HTTPStatusCod.Unauthorizd);}}
[Rout("logout")][HttpGt][HTTPPost]publicvoidLogout(){FormsAuthntication.SignOut();}
[Authoriz][Rout("profil")]publicIHTTPActionRsultGtProfil(){rturnOk(Usr.Idntity.Nam);}}}
基本上,上述这两个档案就可以完成最基本的登入(PostLogin),登出(注销)等基本身分验证功能,搭配[授权]动作过滤器(过滤行动)还可以对取得登入者名称(GtProfil)功能进行基本授权验证,因此这是一份完成的表单验证实作,非常容易上手。
以下我将介绍在不同的专案范本下,才能让这段程式码正常运作:
使用「空白」专案范本开始,外加网络API核心参考(如下图示)
这部分只要在专案根目录下的Wb.config中加入身份验证模式=“表格”/认证即可:
2.使用「MVC」专案范本开始,外加网络API核心参考(如下图示)
在MVC专案范本下,预设会停用所有表单验证功能,如果要启用表单验证的话,则要修改的Wb.config两个地方:
调整认证的模式属性为形式(原本预设值为无)
删除删除名称=“FormsAuthntication”/设定(原本这行会停用所有表单验证的功能)
由于ASP.NETMVC专案预设移除了FormsAuthntication模组,如果你没有意识到这个模组预设被移除的话,会导致你的代码怎样写都能执行,登入也能跑,也不会发生例外,但登入者会永远是「尚未登入」的鬼打墙状态!
3.使用「网页API」专案范本开始,外加网络API核心参考(如下图示)
在网页API专案范本下,预设也会停用所有表单验证功能,但要改的地方又比MVC专案多一些,地雷实在很多啊!
如果要启用表单验证的话,除了要修改的Wb.config两个地方(跟MVC专案范本一样),还要修改App_Start\WbApiConfig.cs档案:
修改的Wb.config两个地方:
调整认证的模式属性为形式(原本预设值为无)
删除删除名称=“FormsAuthntication”/设定(原本这行会停用所有表单验证的功能)
修改App_Start\WbApiConfig.cs两行程式码,将其注解起来
//config.SupprssDfaultHostAuthntication();
//config.Filtrs.Add(nwHostAuthnticationFiltr(OAuthDfaults.AuthnticationTyp));
预设的ASP.NET的WbAPI2专案范本中,由于被设定成仅使用承载权杖验证,因此这两行必须注解起来,表单验证才能正常执行。
不过有一点要注意,如果你将这两行注解起来的话,的ASP.NETWbAPI就不能走专案范本预设的的OAuth验证,专案内的的AccountControllr也将无法正常使用!
本文所有程式码,包含所有修改程式码的版本纪录,都已经整理到GitHub上了哦,大家可以点击“阅读原文”下载,再透过Git的工具(TortoisGit,SourcTr,...)即可查看每一个版本的变化历程。
北京治疗白癜风最好的医生在哪家医院北京哪些白癜风医院好