有没有办法强制请求路由器根据方法签名消除控制器操作的歧义?
例如(在控制器中):
[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()并使用if / then分支来决定我的行动......但是让它们分开的方法感觉更清晰。更不用说我必须抛出布尔'baz'(以及任何其他非字符串类型)。我有正当理由有时使用FormCollection,否则我只会保留JsonResult版本。 (formcollection允许编辑'many'项目,而Json参数化版本只编辑单个项目)
我也可以使用不同的方法名称......(如果我不能做我想做的话,可能就是我要做的)
我尝试将第一种方法的返回类型显式设置为ViewResult并确保客户端仅发送了accept:application / json标头,但似乎并不重要,因为我不断获得有关方法签名不明确的异常。有没有办法强迫我想要的行为?
答案 0 :(得分:0)
MVC框架不使用方法的返回类型来过滤方法。
如果你真的想这样做,你可以编写自己的ActionFilter。
答案 1 :(得分:0)
从我的经验来看,ASP.NET MVC并不喜欢尝试重载方法。你最好把它作为if / else的一个方法,或者让另一个Action专门响应Ajax请求。
答案 2 :(得分:0)
我同意能够根据返回类型选择一个动作会更清晰。您可以实现自己的IActionInvoker
类来执行此操作。