我创建了一个自定义的MVC模型绑定器,每当服务器接收到HttpPost
请求时就会调用它。但是对于HttpGet
请求不会调用。
- 我的自定义模型绑定器是否应该在
GET
期间被调用?如果是,那么我错过了什么? - 如果不应该,在
GET
请求中如何编写处理QueryString
的自定义代码?
以下是我的实现...
public class CustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// This only gets called for POST requests. But I need this code for GET requests.
}
}
全局.asax
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();
//...
}
我研究过这些解决方案,但它们并不完全适用于我所需要的内容:
- 通过
TempData
持久化复杂类型 - 使用默认绑定器构建复杂类型(
?Name=John&Surname=Doe
)
回答备注
感谢@Felipe的帮助。以防有人遇到同样的问题,我学到了:
- 自定义模型绑定器可以用于
GET
请求 - 您可以使用
DefaultModelBinder
类 - 我的问题在于操作方法必须具有参数(否则模型绑定器会跳过
GET
请求,如果你想一下就会明白为什么)
Request
获取查询字符串。 - J SantoshOnActionExecuting
中获取到了我的QueryString。那么我就不能将QueryString转换为对象并将其作为参数传递给操作方法了,是吧?这让我陷入了同样的困境。 - Niels Filter