ASP net MVC 4 中Security.FormsAuthentication验证用户的状态(匿名已登录)
MVC 4 中Security.FormsAuthentication验证用户的状态(匿名|已登录)
专题图编号:
ylbtechASPnetMvc100010013Mvc4Security
1,功能描述
MVC 4 下利用System.Web.Security.FormsAuthentication类,验证用户的状态(匿名|已登录)
以项目为例:在视图和和区域里的视图,分别都列举俩个页面(允许匿名和不允许匿名)。
2,技术与环境
MVC 4 下System.Web.Security.FormsAuthentication类,验证用户的状态(匿名|已登录)
3,解决方案资源管理器
4,功能截图
4.1,匿名状态下()
4.1.1/Home/Index网站首页
4.1.2/Account/Login登录
4.1.3只要是匿名用户,单击加“[NM]”修饰的地址,都会跳转到/Accout/Login页面
4.2,已登录状态下
4.2.1/Accout/Index用户中心
5,代码分析
5.1,/web.config设置重定向登录页面
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880"/>
</authentication>
5.2,/Controllers/AccountController.cs账户管理控制器ylb_tip:1, 加“[Authorize]”修饰的方法拒绝匿名。
ylb_tip:2, 提示如果是"HttpPost" 提交,则Request["param"])则再也获取不了值。
5.3/Controllers/HomeController.cs首页控制器(注:区域里面的权限原理相同,在这儿就不多介绍)
5.4/Account/Login
<%@ Page Title=""
Language="C#"MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1"ContentPlaceHolderID="TitleContent"runat="se rver">
Login
</asp:Content>
<asp:Content ID="Content2"ContentPlaceHolderID="MainContent"runat="ser ver">
<h2>Login </h2>
<form action ="/Account/Login" method ="post">
<fieldset >
<legend >Login </legend >
<input name ="returnUrl" type ="hidden"
value ='<%=ViewData["ReturnUrl"] %>' />
username:<input id ="username" name ="username" value ="sunshine"/><br /> password:<input id ="userpass" name ="userpass" value ="m123"/><br /> <button type ="submit">Login </button >
</fieldset >
</form >
</
asp:Content >
5.6.2/App_Start/FilterConfig.cs【没修改】
5.6.3/App_Start/WebApiConfig.cs【没修改】
作者:ylbtech
出处:/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
课题_ASP,NET Form表单验证
Form表单验证一: 的安全认证模式Windows, Forms, Passport, None二:修改验证模式修改Web.config <system.web><!--修改验证模式为Forms--><authentication mode="Forms"><forms loginUrl="~/Login.aspx" name="HotelUser" defaultUrl="Default.aspx"></forms></authentication><!--禁止匿名登陆--><authorization><deny users="?"/></authorization>三:用户登陆,发身份验证票FormsAuthentication.FormsCookieName ~ 就是上面的HotelUser//登陆成功后,返回请求页面a:System.Web.Security.FormsAuthentication.RedirectFromLoginPage(FormsAuthentication.FormsCookieName,false);//发验证票,到指定页面b:System.Web.Security.FormsAuthentication.SetAuthCookie(FormsAuthentication.FormsCookieName,false);Response.Redirect("Default.aspx");四:用户退出System.Web.Security.FormsAuthentication.SignOut();五:用户是否通过验证User.Identity.IsAuthenticated //如果通过验证,或是有Cookie存在值为True,否则为False六:Web.config 作用范围0: machine.config 的设置作用整个机器所有目录及其目录下所有文件. -->子随父姓1: Web.config 的设置作用于所在目录的所有文件及其子目录下所有文. -->子随父姓2: 子目录下的Web.config 设置将覆盖由父目录继承下来的设置-->将在外,军命有所不受七:设置某个文件夹或文件的访问权限1:在相应文件夹下建立web.config文件<authorization><deny users="?"/> //这里设置访问权限</authorization>2: 在根目录web.config下设置整个站点所有文件夹和文夹的访问权限<configuration>//目录文件夹1<location path ="Public"> //<location path ="Public/Default.aspx"> 为某个文件设置访问配置<system.web><authorization><allow users="*"/></authorization></system.web></location>//目录文件夹2<location path ="ManageSys"><system.web><authorization><allow users="Admin"/><allow users="WF"/><allow users="FY"/><deny users="*"/></authorization></system.web></location>//原根目录web.config 配置<system.web><authentication mode="Forms"><forms loginUrl="~/Login.aspx" name="HotelUser" defaultUrl="Default.aspx"></forms></authentication><authorization><deny users="?"/></authorization></system.web></configuration>八:单点登陆1:获取机器key 生成密钥<密钥生成方法>protected void btn_OK_Click(object sender, EventArgs e){string decStr = this.CreateKeyString(int.Parse(this.TextBox1.Text));string valStr = this.CreateKeyString(int.Parse(this.TextBox2.Text));this.TextBox3.Text = string.Format("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", valStr, decStr);}/// <summary>/// 生成加密型强随机Key 值/// </summary>/// <param name="i">Key 的有效长度:/// decryptionKey 的有效值为8 或24;/// validationKay 的有效值为20 至64/// </param>private string CreateKeyString(int i){System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider(); //加密随机数生成器byte[] bt = new byte[i];rng.GetBytes(bt);//用加密型强随机值序列填充字节数组System.Text.StringBuilder str = new System.Text.StringBuilder();for (int j = 0; j < i; j++){str.Append(string.Format("{0:X2}", bt[j])); //转换成大写的十六进制文本}return str.ToString();}2:在要实现单点登陆的项目根web.config中添加密钥;a) 两个项目Web.cinfig的<machineKey> 节点确保以下几个字段完全一样:validationKey 、decryptionKey 、validationb) 两个项目的Cookie 名称必须相同,也就是<forms> 中的name 属性,这里我们把它统一为name ="UserLogin" //name=""c) 注意区分大小写d) 登陆页面整合到统一登陆点登陆比如:loginUrl="/login.aspx", 在登陆页面发放验证票//项目网站1<system.web><machineKey validationKey="B3D04DE25D02B63898851BD799F5E8DBE7CE043B9A09AC2E5ACE14BD9C84717E3731837A76923B327340945010C58C31" decryptionKey="9EBAA26A9E9424994CE2C0A4C0EA5B20" validation="SHA1"/><authentication mode="Forms"><forms name="UserLogin" loginUrl="~/Login.aspx"></forms></authentication><authorization><deny users ="?"/></authorization></system.web>//项目网站2<system.web><machineKey validationKey="B3D04DE25D02B63898851BD799F5E8DBE7CE043B9A09AC2E5ACE14BD9C84717E3731837A76923B327340945010C58C31" decryptionKey="9EBAA26A9E9424994CE2C0A4C0EA5B20" validation="SHA1"/><authentication mode="Forms"><forms name="UserLogin" loginUrl="~/Login.aspx"></forms></authentication><authorization><deny users ="?"/></authorization></system.web>3: 给用户发放Cookie<1>: 一次登陆后,给各个站点同时发放Cookie认证。
formsauthentication 详解
formsauthentication 详解Forms身份验证(Forms Authentication)详解Forms身份验证是一种用于在Web应用程序中管理用户认证的技术。
它通过使用cookie或URL重写的方式,将用户的身份信息保存在用户端,实现用户的跨页面访问状态的持久化。
Forms身份验证的工作原理如下:1. 用户访问需要进行身份验证的页面时,服务器将重定向用户至登录页面。
2. 用户在登录页面提供用户名和密码,并提交表单进行验证。
3. 服务器验证用户提供的凭据,并在验证通过后,创建一个安全的身份票证(FormsAuthenticationTicket)并加密。
4. 服务器将身份票证发送给客户端,通常是通过cookie方式。
5. 客户端在后续的请求中,将身份票证附加在请求中的Cookie或URL参数中,发送给服务器。
6. 服务器接收到请求后,通过解密和验证身份票证,确定用户的身份,并授权用户执行相应的操作。
Forms身份验证的优势包括:1. 灵活性:Forms身份验证可以与各种认证存储(如数据库、Active Directory 等)集成,以适应不同的身份验证需求。
2. 可扩展性:通过自定义的身份验证模块和提供者,可以实现额外的功能,如多因素认证、社交媒体登录等。
3. 安全性:Forms身份验证将身份票证加密后发送给客户端,有效防止篡改和伪造。
4. 无连接性:Forms身份验证不依赖于服务器端的会话状态,降低了服务器的负载。
需要注意的是,在使用Forms身份验证时,开发者需要合理设计和实施安全策略,以保护用户的身份和数据安全。
如使用HTTPS协议进行通信,设置适当的会话超时时间,以及对敏感信息进行加密。
总结:Forms身份验证是一种在Web应用程序中管理用户认证的有效技术。
它通过将身份票证保存在客户端,实现了用户的持久化身份状态。
开发者应充分理解和合理使用Forms身份验证,以确保用户身份和数据的安全性。
asp.netMVC常见安全问题及解决方案
MVC常见安全问题及解决⽅案⼀.CSRFExample : 在登陆状态下进⼊了攻击⽹站向安全站点发送了请求。
Solution: 在view 中使⽤ @Html.AntiForgeryToken(), 在Action 上加上 [ValidateAntiForgeryToken] 特性。
再次点到跨域请求的时候就会显⽰:“The required anti-forgery cookie "__RequestVerificationToken" is not present.”⼆.Solution: 分为 Html ,js ,url 三⼤领域。
需要区别对待进⾏输⼊输出编码。
Html 使⽤ Server.HtmlEncode , Server.HtmlDecode;url使⽤ Server.urlEncode, Server.urlDecode;js 使⽤: escape, unescape;或者使⽤ Anti- 库。
下载地址:引⼊后,html ,js ,url 分别对应的⽅法 HtmlEncode(string),JavaScriptEncodes(string),UrlEncode(string).三.直接对象引⽤Example: …/Bidding/RFPRFI/Detail?editId=xxx。
可以直接看到其他公司的信息;bidding-> evaluation . 应标⽅可直接在地址栏中输⼊:…/Bidding/Evaluation/SaveScope?proposalId=1603&priceScope=100&proScore=100&chs=100。
来随意修改评分。
还有MDI 系统中的下拉框是easyui绑定⼀个隐藏域两部分。
甚⾄可以使⽤浏览器的调试⼯具,直接修改hidden 域的值后提交。
Solution: 加⼊验证。
例如 : select * from rfprfi where edited = xxx and owner = erid. 验证该⽤户对此信息是否有读写的权限。
浅析ASP .NET的身份验证
浅析的身份验证摘要:在web应用程序开发中,经常会涉及与用户交互的过程。
不同用户的权限是不同的,要实现不同用户的权限分配,就要涉及用户、角色的管理、用户的登陆等几方面的问题。
2.0的成员和角色管理简化了用户管理的功能。
本文主要针对应用程序身份验证的概念,介绍了各种身份验证模式并进行了比较, 阐述了选择身份验证模式的机制,并给出了一种基于窗体身份验证模式的实现方法。
关键词:身份验证;Windows验证;Passport身份验证;Forms身份验证1问题描述1.1问题的提出在网站的开发中,大多数都会碰到与用户的交互。
用户可以利用应用程序来完成自己的业务或实现一些功能,比如发布信息,获取信息等等。
为了交互应用的需要,这些用户需要保存到存储器中,不同用户的权限不同,比如:管理员可以配置应用程序,可以增、删、改用户信息,而普通的用户只能浏览网站。
要实现不同用户的权限管理,首先就要对不同的用户的身份进行确认,这就是本文要讲述的主题——身份验证。
1.2身份验证的概念什么是身份验证?web应用程序中如果想要不同的用户有不同的资源访问权限,就要对访问该资源的用户进行辨别,应用程序需要知道该用户是谁,以确定访问者的身份是否有权限进行访问和操作。
这一过程就是身份验证。
2.0提供的4种身份验证模式2.1 Windows验证使用这种身份验证模式时,依赖于IIS对用户进行验证,并创建一个Windows访问令牌来表示已通过验证的标识。
IIS提供以下几种身份验证机制:基本身份验证简要身份验证集成windows身份验证证书身份验证匿名身份严整2.2 Passport(护照)身份验证在通常的基于用户名和密码的身份验证程序中,网站开发人员一般要处理下面几个过程:一个用于用户输入用户名和密码的图形界面一个用来保存用户信息的数据库实现用户验证注销功能如果自己来编写登陆程序的话,上面的步骤是必不可少的。
提供了Passport身份验证模式,由Microsoft提供集中身份验证服务,完全实现了上面提到的4个方面,这些功能由System.Web.Security.PassportIdentity类来实现。
ASP.NETCore身份认证(Identity、Authentication)
Core⾝份认证(Identity、Authentication)Authentication和Authorization每每说到⾝份验证、认证的时候,总不免说提及⼀下这2个词。
他们的看起来⾮常的相似,但实际上他们是不⼀样的。
Authentication想要说明⽩的是你是谁(你的⾝份是什么)Authorization想要说明⽩的是你能做什么(得到了什么权限)但是这两个词通常是要同时存在的。
要知道有什么权限前提是知道你是谁。
OAuth2认证这是最近很流⾏的认证的标准。
要完全理解他的话也要说上⼀⼤篇,在这⾥简单点说明:第三⽅⽹站能够得到认证⽅提供的⾝份和授予的权限。
就是上⾯提到的Authorization说个例⼦这⾥似乎说个栗⼦会⽐较好,例如搭乘飞机:假设你购买了⼀张南⽅航空的机票。
那么你去坐飞机的时候可能会出现以下场景:1.到南⽅航空的柜台checkin。
得到⼀张纸质的,上⾯有你⾝份证信息,航班信息。
2.到⼊站⼝被检票⼈员查票。
检票员会查看你的机票是否正确,机票⾝份信息是否与你的⾝份证信⼼对应。
3.到VIP休息室等待登机。
被服务⼈员告知你并没有权限进⼊VIP休息室,原因是购买的是普通票,⾮贵宾票。
4.登机,⼊座。
空乘⼈员核对你的航班是否对应当前的航班。
好了,上⾯的⼏个场景跟认证是相当的相似。
第⼀步checkin,对应的是认证系统,纸质票就是提供的票据。
第⼆步就相当于你⾃⼰的⽹站,得到了南⽅航空的认证,只要知道是南⽅航空颁发的票据,你都认为是有效的。
这⾥也有个特别的地⽅,就是机场不可能只认南⽅航空,可能东⽅航空,春秋航空都认,所以这个也是认证的特点,你的⽹站是可以同时实现多个具有相同规则的认证⽅提供的票据。
第三步相当于是权限的验证,虽然客户⼿上是有票据,但由于票据上声明(Claim)的权限并不包含VIP休息室使⽤。
第四步相当于允许的权限,有这个票据,可以指定做某些可做的事情。
为什么要⽤现在的服务基本上都是集群的,进⾏的⽹络通讯也以⽆状态请求为主。
ASP.NET中如何实现FORM认证登录
的安全认证,共有“Windows”“Form”“Passport”“None”四种验证模式。
“Windows”与“None”没有起到保护的作用,不推荐使用;“Passport”我又没用过,唉……所以我只好讲讲“Form”认证了。
我打算分三部分:第一部分——怎样实现From 认证;第二部分—— Form 认证的实战运用;第三部分——实现单点登录(Single Sign On)第一部分如何运用Form 表单认证一、新建一个测试项目为了更好说明,有必要新建一个测试项目(暂且为“FormTest”吧),包含三张页面足矣(Default.aspx、Login.aspx、UserInfo.aspx)。
啥?有人不会新建项目,不会新增页面?你问我咋办?我看这么办好了:拖出去,打回原藉,从幼儿园学起……二、修改Web.config1、双击项目中的Web.config(不会的、找不到的打PP)2、找到下列文字<authentication mode="Windows" /> 把它改成:<authentication mode="Forms"><forms loginUrl="Login.aspx" name=".ASPXAUTH"></forms></authentication>3、找到<authorization> <allow users="*" /></authorization>换成<authorization><deny users="?"></deny></authorization>这里没什么好说的,只要拷贝过去就行。
虽说如此,但还是有人会弄错,如下:Code若要问是谁把<deny users="?"></deny> 放入<authentication> 中的,我会很荣幸地告诉你,那是N 年前的我:<authentication> 与<authorization> 都是以auth 字母开头又都是以ation 结尾,何其相似;英文单词背不下来的我以为他们是一伙的……三、编写 .cs 代码——登录与退出1、登录代码:a、书本上介绍的private void Btn_Login_Click(object sender, System.EventArgs e){if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text= ="123456"){System.Web.Security.FormsAuthentication.RedirectFromLoginPage (this.Txt_UserName.Text,false);}}b、偶找了N 久才找到的private void Btn_Login_Click(object sender, System.EventArgs e){if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text= ="123456"){System.Web.Security.FormsAuthentication.SetAuthCookie(this.Tx t_UserName.Text,false);Response.Redirect("Default.aspx");}}以上两种都可发放验证后的Cookie ,即通过验证,区别:方法a) 指验证后返回请求页面,俗称“从哪来就打哪去”。
ASP.NET MVC:窗体身份验证及角色权限管理示例
MVC:窗体身份验证及角色权限管理示例前言本来使用Forms Authentication进行用户验证的方式是最常见的,但系统地阐明其方法的文章并不多见,网上更多的文章都是介绍其中某一部分的使用方法或实现原理,而更多的朋友则发文询问如何从头到尾完整第实现用户的注册、登录。
因此,Anders Liu在这一系列文章中计划通过一个实际的例子,介绍如何基于Forms Authentication实现:l 用户注册(包括密码的加密存储)l 用户登录(包括密码的验证、设置安全Cookie)l 用户实体替换(使用自己的类型作为er的类型)有关Forms Authentication的原理等内容不属于本文的讨论范畴,大家可以通过在Google等搜索引擎中输入“Forms Authentication”、“Forms身份验证”、“窗体身份验证”等关键词来查看更多资源。
本文仅从实用的角度介绍如何使用这一技术。
不使用Membership本文介绍的实现方式不依赖 2.0提供的Membership功能。
这主要是因为,如果使用Membership,就必须用aspnet_regsql.exe实用工具配置数据库,否则就得自己写自定义的MembershipProvider。
如果用aspnet_regsql.exe配置数据库,就会导致数据库中出现很多我们实际并不需要的表或字段。
此外更重要的是,默认的SqlMembershipProvider给很多数据表添加了ApplicationID列,其初衷可能是希望可以将多个应用程序的用户全部放在一个库里,但又能彼此隔离。
但实际情况是,每个应用程序都在其自身的数据库中保存用户数据。
因此,引入这个ApplicationID无端地在每次查找用户时增加了额外的条件。
另一方面,如果考虑自己实现一个MembershipProvider,因为工作量巨大,有点得不偿失。
但是,如果不使用Membership,也就无法享受 2.0中新增的Login等控件的便利了。
Asp#net Mvc4 之基于Authorize实现的模块权限验证方式
在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限。
显然,这样并不能满足我们的需求,对于一般的MVC系统来说,如果我们定义一个controller来处理一个模块的话,我们大致有以下需求:一,单个action的访问权限。
如果删除,列表action二,一个action两种权限,如edit(int? id)如果id为null则添加,或者修改三,在此cotroller验证其它模块权限,比如,我们要在新闻模块获取新闻列表四,对于某些通过模块,如分类,我们希望通过传入不同的参数可以验证不同模块的权限对于四种情况,我理想的想法是:对于第一种,直接制定controller的moduleid和action的权限[Module(ModuleId=6)]public class Controller: Controller{[SysAuthorize(Permission.List)] //设置action要验证的权限public ActionResult List()}对于第二种情况,我们希望通过参数来达到验证那个权限的目的:[Module(ModuleId=6)]public class Controller: Controller{//如果参数为null是将验证添加权限否则验证修改权限[SysAuthorize(Permission.Add,Permission.Edit,"id",null)]public ActionResult Edit(int? id)}对于第三种情况,我们可以为action验证指定单独的模块id[Module(ModuleId=6)]public class Controller: Controller{[SysAuthorize(9,Permission.List)] //此方面验证模块9的列表权限public ActionResult List(int CType)}对于第四种情况,我们可以为模块添加不同的参数module对应关系[Module(ModuleId=5,"CType",1)][Module(ModuleId=6,"CType",2)]public class Controller: Controller{如果当前传入CType为1则验证ModuleId=5,等于2是验证ModuleId =6[SysAuthorize(Permission.List)]public ActionResult List(int CType)}想法定好以后,我们就可以去实现了。
vs项目中的Web.config详解
vs 项目中的Web.config详解vs 项目中的Web.config详解一、认识Web.config文件Web.config 文件是一个XML文本文件,它用来储存 Web 应用程序的配置信息(如最常用的设置 Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。
当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config 文件,包括默认的配置设置,所有的子目录都继承它的配置设置。
如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。
它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
(一).Web.Config是以XML文件规范存储,配置文件分为以下格式1.配置节处理程序声明特点:位于配置文件的顶部,包含在<configSections>标志中。
2.特定应用程序配置特点: 位于<appSetting>中。
可以定义应用程序的全局常量设置等信息.3.配置节设置特点: 位于<system.Web>节中,控制运行时的行为.4.配置节组特点: 用<sectionGroup>标记,可以自定义分组,可以放到<configSections>内部或其它<sectionGroup>标记的内部.(二).配置节的每一节1.<configuration>节根元素,其它节都是在它的内部.2.<appSetting>节此节用于定义应用程序设置项。
对一些不确定设置,还可以让用户根据自己实际情况自己设置用法:I.<appSettings><add key="Conntction" value="server=192.168.85.66;userid=sa;password=;database=Info;"/><appSettings>定义了一个连接字符串常量,并且在实际应用时可以修改连接字符串,不用修改程式代码.II.<appSettings><add key="ErrPage" value="Error.aspx"/><appSettings> 定义了一个错误重定向页面.3.<compilation>节格式:<compilationdefaultLanguage="c#"debug="true"/>I.default language: 定义后台代码语言,可以选择C#和两种语言.IIdebug : 为true时,启动aspx调试;为false不启动aspx调试,因而可以提高应用程序运行时的性能。
ASP net MVC 4 中Security.FormsAuthentication验证用户的状态(匿名已登录)
MVC 4 中Security.FormsAuthentication验证用户的状态(匿名|已登录)专题图编号:ylbtechASPnetMvc100010013Mvc4Security1,功能描述 MVC 4 下利用System.Web.Security.FormsAuthentication类,验证用户的状态(匿名|已登录)以项目为例:在视图和和区域里的视图,分别都列举俩个页面(允许匿名和不允许匿名)。
2,技术与环境 MVC 4 下System.Web.Security.FormsAuthentication类,验证用户的状态(匿名|已登录)3,解决方案资源管理器4,功能截图4.1,匿名状态下()4.1.1/Home/Index网站首页4.1.2/Account/Login登录4.1.3只要是匿名用户,单击加“[NM]”修饰的地址,都会跳转到/Accout/Login页面4.2,已登录状态下4.2.1/Accout/Index用户中心5,代码分析5.1,/web.config设置重定向登录页面<authentication mode="Forms"><forms loginUrl="~/Account/Login" timeout="2880"/></authentication>5.2,/Controllers/AccountController.cs账户管理控制器ylb_tip:1, 加“[Authorize]”修饰的方法拒绝匿名。
ylb_tip:2, 提示如果是"HttpPost" 提交,则Request["param"])则再也获取不了值。
5.3/Controllers/HomeController.cs首页控制器(注:区域里面的权限原理相同,在这儿就不多介绍)5.4/Account/Login<%@ Page Title=""Language="C#"MasterPageFile="~/Views/Shared/Site.Master"Inherits="System.Web.Mvc.ViewPage<dynamic>" %><asp:Content ID="Content1"ContentPlaceHolderID="TitleContent"runat="se rver">Login</asp:Content><asp:Content ID="Content2"ContentPlaceHolderID="MainContent"runat="ser ver"><h2>Login </h2><form action ="/Account/Login" method ="post"><fieldset ><legend >Login </legend ><input name ="returnUrl" type ="hidden"value ='<%=ViewData["ReturnUrl"] %>' />username:<input id ="username" name ="username" value ="sunshine"/><br /> password:<input id ="userpass" name ="userpass" value ="m123"/><br /> <button type ="submit">Login </button ></fieldset ></form ></asp:Content >5.6.2/App_Start/FilterConfig.cs【没修改】5.6.3/App_Start/WebApiConfig.cs【没修改】作者:ylbtech出处:/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
