本文介绍了间歇asp.net mvc的例外:“一个公益行动方法ABC无法控制器XYZ被发现。”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到一个间歇性异常说,asp.net的MVC无法找到操作方法。这里的异常:

I'm getting an intermittent exception saying that asp.net mvc can’t find the action method. Here’s the exception:

一个公共行动方法补可能
  不能在控制器发现
  Schoon.Form.Web.Controllers.ChrisController。

我觉得我有路由设置正确,因为这个应用程序的工作的大部分时间。这里是控制器的操作方法。

I think I have the routing set up correctly because this application works most of the time. Here is the controller’s action method.

[ActionName("Fill")]
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post), UserIdFilter, DTOFilter]
public ActionResult Fill(int userId, int subscriberId, DisplayMode? mode)
{
     //…
}

路线:

routes.MapRoute(
        "SchoonForm",
        "Form/Fill/{subscriberId}",
        new { controller = "ChrisController", action = "Fill" },
        new { subscriberId = @"\d+" }
    );

这里是堆栈:

System.Web.HttpException:公共
  操作方法填充不能
  控制器发现
  Schoon.Form.Web.Controllers.ChrisController。
  在
  System.Web.Mvc.Controller.HandleUnknownAction(字符串
  actionName)在
  C:\\ dev的\\第三方\\ MvcDev的\\ src \\ SystemWebMvc \\的mvc \\ Controller.cs:行
  在197
  System.Web.Mvc.Controller.ExecuteCore()
  在
  C:\\ dev的\\第三方\\ MvcDev的\\ src \\ SystemWebMvc \\的mvc \\ Controller.cs:行
  在164
  System.Web.Mvc.ControllerBase.Execute(RequestContext的
  RequestContext的)在
  C:\\ dev的\\第三方\\ MvcDev的\\ src \\ SystemWebMvc \\的mvc \\ ControllerBase.cs:行
  76
  System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext的
  RequestContext的)在
  C:\\ dev的\\第三方\\ MvcDev的\\ src \\ SystemWebMvc \\的mvc \\ ControllerBase.cs:行
  在87
  System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase
  HttpContext的)在
  C:\\ dev的\\第三方\\ MvcDev的\\ src \\ SystemWebMvc \\的mvc \\ MvcHandler.cs:行
  在80
  System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext的
  HttpContext的)在
  C:\\ dev的\\第三方\\ MvcDev的\\ src \\ SystemWebMvc \\的mvc \\ MvcHandler.cs:行
  在68
  System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext的
  HttpContext的)在
  C:\\ dev的\\第三方\\ MvcDev的\\ src \\ SystemWebMvc \\的mvc \\ MvcHandler.cs:行
  104
  System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
  在
  System.Web.HttpApplication.ExecuteStep(IExecutionStep
  一步,布尔和放大器; completedSynchronously)

下面是我的过滤器的一个例子,他们都以同样的方式:

Here is an example of my filters they all work the same way:

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);
    }
}

谢谢,
克里斯

Thanks,Chris

推荐答案

我们找到了答案。我们看着我们的网络日志。它表明,我们正在接受一些奇怪的动作的HTTP(动词/方法),比如OPTIONS,PROPFIND和HEAD。

We found the answer. We looked into our web logs. It showed that we were receiving some weird http actions (verbs/methods) like OPTIONS, PROPFIND and HEAD.

这似乎有些论文异常的原因。这就解释了为什么它是间歇性的。

This seems to the cause of some of theses exceptions. This explains why it was intermittent.

我们与curl.exe工具重现该问题:

We reproduced the issue with the curl.exe tool:

curl.exe -X OPTIONS http://localhost/v2.3.1.0/(S(boztz1aquhzurevtjwllzr45))/Form/Fill/273
curl.exe -X PROPFIND http://localhost/v2.3.1.0/(S(boztz1aquhzurevtjwllzr45))/Form/Fill/273
curl.exe -X HEAD http://localhost/v2.3.1.0/(S(boztz1aquhzurevtjwllzr45))/Form/Fill/273

我们使用的修复是增加的授权部分的web.config:

The fix we used was to add an authorization section to web.config:

<authorization>
  <deny users="*" verbs="OPTIONS, PROPFIND, HEAD"/>
</authorization>

这篇关于间歇asp.net mvc的例外:“一个公益行动方法ABC无法控制器XYZ被发现。”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-15 06:24