同じ名前の2つのアクションを持つコントローラーがありますが、1つはいくつかのパラメーターを受け入れます。それらを明確にするために、一方はGET要求のみを受け入れ、もう一方はPOST要求のみを受け入れます。また、アクションメソッドでAjax呼び出しのみを強制するために使用されるHttpAjaxAttributeもあります。何らかの理由で、このソリューションは信頼できません。インポートアクションへの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;
}
}