我有很多控制器,它们根据参数返回数据。
但是用户可以伪造他们发送给服务器的参数,所以我想拦截所有请求,如果某些参数随模型返回无效,则发出警告/错误。
控制器的示例标题是这个
[Intercept<CarModel>] <-- I want something like this, <CarModel> because the interceptor knows what type to cast the model when intercepted
public object Cards(CarModel model) {
我想创建这种属性,拦截控制器,检查模型是否有效。
我怎么能这样做?我用Google搜索了一下,但没有找到这样的东西。
答案 0 :(得分:1)
只需将验证码放入操作中即可。更好的是,从IValidatable接口继承并在所有模型上实现HasPropertiesValid()。然后你只需要调用model.HasPropertiesValid();在你的行动开始时。
可验证的界面
interface IValidatable {
bool IsPropertiesValid();
}
模型示例
public class CarModel : IValidatable {
public string ModelName {get;set;}
public string ManufacturerName {get;set;}
public bool IsPropertiesValid() {
if(ManufacturerName == "Toyota") {
if(ModelName == "Prius") return true;
}
return false;
}
}
控制器
public ActionResult ToyotaCar(CarModel model){
if(!model.IsPropertiesValid()) return RedirectToAction("QuitMessingAround","CaughtYou");
}