- @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中将自动得到相应的错误消息。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="http://images.myeducs.cn/files/uploadimg/20120111/1056420.png" />
三、通过配置的Error View处理异常
在上面的配置中,针对InvalidUserNameException和UserNamePasswordNotMatchException这两种异常类型的配置策略都将PostHandlingAction属性设置为“None”,意味着不