有没有办法强制请求路由器基于方法签名来消除控制器操作的歧义?根据结果类型区分同名控制器操作?
例如(在控制器):
[HttpPost]
public ActionResult MyAction(FormCollection f) {
//do stuff with big form and return viewresult
return View();
}
[HttpPost]
public JsonResult MyAction(string foo, string bar, bool baz) {
//separate method to handle just the ajax stuff
return Json();
}
我知道我可以在第一种方法使用Request.IsAjaxRequest()和使用,如果/然后转移到决定了我的动作......但感觉清洁工留下他们单独的方法。更何况我不得不抛出布尔型'baz'(以及任何其他非字符串类型)。我有一个合法的理由来使用FormCollection有时候,否则我只是保留JsonResult版本。 (formcollection允许编辑'many'项目,而Json参数化版本只是编辑单个项目)
我也可以使用不同的方法名称......(可能是我做什么,如果我不能做什么我想)
我试着将第一个方法的返回类型显式设置为ViewResult,并确保客户端只发送接受:application/json头,但似乎并不重要,因为我不断收到关于方法签名的异常暧昧。有没有办法强制我想要的行为?
这似乎是一个有用的建议......但是,它似乎会过分复杂化一些事情。就像战斗框架有点太... – 2010-06-30 16:31:42
这些可扩展性点存在的原因。 – Ryan 2010-06-30 17:24:46
虽然我喜欢动作过滤器建议。这是我们为所有表格数据所做的。该行为本身返回一个表格模型。然后,操作筛选器查看请求以确定表是否应呈现为Json(用于jqgrid),Html,Csv或Pdf。然后,我们转换表格模型以获得结果(在此使用访问者模式)。这非常有用,因为行动不必担心请求;它只是返回数据。 – Ryan 2010-06-30 17:28:34