我有一个控制器,它有两个同名的动作,但一个接受一些参数。为了消除歧义,一个只接受 GET 请求,而另一个只接受 POST 请求。我还有一个 HttpAjaxAttribute,它用于仅对操作方法强制执行 Ajax 调用。由于某种原因,此解决方案不可靠,有时在对 Import 操作的 GET 请求上,MVC 顽固地尝试选择 POST/AJAX 并从 HttpAjaxAttribute 引发 Ajax 异常。我发现了一个可能相关的问题。我认为以特定顺序附加属性(HttpGet 或 HttpPost,然后是 HttpAjax)可以解决问题,但事实并非如此。我的网站工作了一段时间,现在失败了。我在看似随机的时间遇到了这个问题。我该如何永久修复它?
控制器动作
[HttpGet]
public ActionResult Import()
{
// some code
}
[HttpPost]
[HttpAjax]
public ActionResult Import(string country, string state, string city, ImportModel[] locations)
{
// some code
}
HttpAjaxAttribute
/// <summary>
/// Makes the controller action that has this attribute applied accept only Ajax requests.
/// </summary>
public class HttpAjaxAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
if (!controllerContext.HttpContext.Request.IsAjaxRequest())
{
throw new Exception("The action " + methodInfo.Name + " can only be called via an Ajax request");
}
return true;
}
}