Je reçois une exception intermittente disant que asp.net mvc ne peut pas trouver la méthode d'action. Voici l'exception :
Une méthode d'action publique "Fill" pourrait ne pas être trouvée sur le contrôleur Schoon.Form.Web.Controllers.ChrisController'.
Je pense avoir configuré le routage correctement car cette application fonctionne la plupart du temps. Voici la méthode d'action du contrôleur.
[ActionName("Fill")]
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post), UserIdFilter, DTOFilter]
public ActionResult Fill(int userId, int subscriberId, DisplayMode? mode)
{
//…
}
L'itinéraire :
routes.MapRoute(
"SchoonForm",
"Form/Fill/{subscriberId}",
new { controller = "ChrisController", action = "Fill" },
new { subscriberId = @"\d+" }
);
Et voici la pile :
System.Web.HttpException : Une action publique d'action publique 'Fill' n'a pas pu être trouvé sur le contrôleur Schoon.Form.Web.Controllers.ChrisController'. à l'adresse System.Web.Mvc.Controller.HandleUnknownAction(String actionName) dans C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\Controller.cs :ligne 197 à System.Web.Mvc.Controller.ExecuteCore() dans C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\Controller.cs :ligne 164 à System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) dans C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\ControllerBase.cs :ligne 76 à System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) dans C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\ControllerBase.cs :ligne 87 à System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) dans C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\MvcHandler.cs :ligne 80 chez System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) dans C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\MvcHandler.cs :ligne 68 à System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) dans C:\dev\ThirdParty\MvcDev\src\SystemWebMvc\Mvc\MvcHandler.cs :ligne 104 à System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() à l'adresse System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Voici un exemple de mes filtres ; ils fonctionnent tous de la même manière :
public class UserIdFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
const string Key = "userId";
if (filterContext.ActionParameters.ContainsKey(Key))
{
filterContext.ActionParameters[Key] = // get the user id from session or cookie
}
base.OnActionExecuting(filterContext);
}
}
Merci, Chris
28 votes
J'ai eu un problème similaire qui, je pense, mérite d'être signalé ici car c'est le premier résultat qui est apparu dans Google lors de la recherche de l'exception ci-dessus. Mon application a généré cette exception lors de la soumission d'un formulaire invalide. Cela était dû au fait que la page qui était (re)rendue appelait RenderAction et que l'action qui était appelée pour rendre une vue partielle était marquée avec l'attribut HttpGet, la suppression de cet attribut a résolu le problème.
3 votes
J'ai également remarqué ce comportement - peut-être est-il préférable de ne pas appliquer d'attributs Http aux méthodes du contrôleur qui renvoient des PartialViewResults.
1 votes
@s1mm0t : a raison. Pour mon cas, son commentaire a résolu le problème.
0 votes
@s1mm0t - envoyez-moi votre adresse postale immédiatement. Une bouteille de scotch est en route pour vous à Noël. ! !!!!
0 votes
Nous avons trouvé quelque chose de similaire : dans certains cas, le fait de renvoyer un autre résultat d'action au lieu d'une redirection vers cette action causait le problème. Ex
PostSomething { return HomePageActionMethod() }
échoue là oùPostSomething { return RedirectToAction(nameof(HomePageActionMethod)); }
fonctionne. (dans notre cas, l'action incriminée dans la vue est située dans un contrôleur différent, et on peut supposer que ce contrôleur n'est pas complètement initialisé avec la première méthode d'appel.