Asp.net mvc Asp.Net MVC:从ActionFilterAttribute到ActionExecuting填充模型属性
我正在为网站中丢失的密码实施验证码控制,如所述 但我觉得自己很不适应这种情况` filterContext.ActionParameters[“captchaValid”]= RecaptCharResponse.IsValid 因为:Asp.net mvc Asp.Net MVC:从ActionFilterAttribute到ActionExecuting填充模型属性,asp.net-mvc,validation,asp.net-mvc-validation,Asp.net Mvc,Validation,Asp.net Mvc Validation,我正在为网站中丢失的密码实施验证码控制,如所述 但我觉得自己很不适应这种情况` filterContext.ActionParameters[“captchaValid”]= RecaptCharResponse.IsValid 因为: 我有一个强类型视图,带有验证器 有一天我会在不记住这个字符串字段的情况下更改属性名,它将不起作用 因此,我在ActionFilterAttribute和OnActionExecuting中搜索了如何编辑我的模型属性,因为我的控制器操作需要这些数据。 我找到了
- 我有一个强类型视图,带有验证器
- 有一天我会在不记住这个字符串字段的情况下更改属性名,它将不起作用
ActionFilterAttribute
和OnActionExecuting
中搜索了如何编辑我的模型属性,因为我的控制器操作需要这些数据。
我找到了,但无法为我工作,因为我需要在执行操作之前设置模型
所以我想我可以添加一个“Post变量”,它将由模型绑定器读取,但似乎filterContext.HttpContext.Request.Form
处于只读模式
那么你认为我怎样才能把结果放在我的模型中呢
例如:MyModel.IsCaptchaValid=recaptchaResponse.IsValid代码>
事件如果无法避免指定属性字段,则比现在更好:
filterContext.Something.Else["ModelKey"] = recaptchaResponse.IsValid;;
向ModelState添加一个错误如何
filterContext.Controller.ViewData.ModelState.AddModelError("", ""Captcha response invalid")
然后,您可以在您的操作中检查ModelState.IsValid(您无论如何都应该这样做)
总有一天我会在不记住这一点的情况下更改财产名称
字符串字段,它将不起作用
如果您担心属性/字符串名称的更改会破坏功能,可以对自定义属性进行单元测试
public void CaptchaValidatorAttribute_SetsActionParameter_ForCaptchaValidity()
{
// arrange
var filterContext = new ActionExecutingContext
{
ActionParameters = new Dictionary<string, object>()
// ... other arrangements, like mocking HttpContextBase and HttpRequestBase
};
var actionFilter = new CaptchaValidatorAttribute();
// act
actionFilter.OnActionExecuting(filterContext);
// assert
Assert.AreEqual(filterContext.ActionParameters.ContainsKey("captchaValid"),
true);
}
public void CaptchaValidatorAttribute_setActionParameter_forCAPTCHAValidation()
{
//安排
var filterContext=新建ActionExecutingContext
{
ActionParameters=新字典()
//…其他安排,如模拟HttpContextBase和HttpRequestBase
};
var actionFilter=new captchavalidater属性();
//表演
onActionFilter.OnActionExecuting(filterContext);
//断言
Assert.AreEqual(filterContext.ActionParameters.ContainsKey(“captchaValid”),
正确的);
}
哼!这很有趣!我没有硬性要求我可以直接修改验证状态!伟大的非常感谢。我需要什么