具体定义在SignIn操作方法中的认证逻辑是这样的:如果用户名不是“Foo”则抛出InvalidUserNameException异常;如果密码不是“password”则抛出UserNamePasswordNotMatchException异常。下面是SignIn操作对应的View的定义:
- @model Artech.Mvc.ExceptionHandling.Models.LoginInfo
- @{
- ViewBag.Title = "SignIn";
- }
- @Html.ValidationSummary()
- @if (ViewBag.Messages != null)
- {
- @ViewBag.Messages
- }
- @using (Html.BeginForm())
- {
- @Html.EditorForModel()<inputtype="submit"value="SignIn"/>
- }
|
在AccountController初始化时指定的异常处理策略“myPolicy”定义在如下的配置中。我们专门针对SignIn操作方法抛出的InvalidUserNameException和UserNamePasswordNotMatchException进行了处理,而ErrorMessageSettingHandler是我们自定义的异常处理器,它仅仅用于设置错误消息。如下面的代码片断所示,如果上述的这两种类型的异常被抛出,最终的错误消息会被指定为“User name does not exist!”和“User name does not match password!”。
- <exceptionHandling>
- <exceptionPolicies>
- <addnameaddname="myPolicy">
- <exceptionTypes>
- <addnameaddname="InvalidUserNameException"
- type="Artech.Mvc.ExceptionHandling.Models.InvalidUserNameException, Artech.Mvc.ExceptionHandling"
- postHandlingAction="None">
- <exceptionHandlers>
- <addnameaddname="ErrorMessageSettingHandler"
- type="Artech.Mvc.ExceptionHandling.ErrorMessageSettingHandler, Artech.Mvc.ExceptionHandling"
- errorMessage="User name does not exist!"/>
- </exceptionHandlers>
- </add>
- <addnameaddname="UserNamePasswordNotMatchException"
- type="Artech.Mvc.ExceptionHandling.Models.UserNamePasswordNotMatchException, Artech.Mvc.ExceptionHandling"
- postHandlingAction="None">
- <exceptionHandlers>
- <addnameaddname="ErrorMessageSettingHandler"
- type="Artech.Mvc.ExceptionHandling.ErrorMessageSettingHandler, Artech.Mvc.ExceptionHandling"
- errorMessage="User name does not match password!"/>
- </exceptionHandlers>
- </add>
- </exceptionTypes>
- </add>
- </exceptionPolicies>
- </exceptionHandling>
|
现在我们通过路由映射将AccountController和Sign设置为默认Controller和Action后,开启我们的应用程序。在输入错误的用户名和错误明码的情况下在ValidationSummary中将自动得到相应的错误消息。