【问题标题】:How to ignore does not implement Icontroller error in MVC?如何忽略 MVC 中未实现 Icontroller 错误?
【发布时间】:2013-02-19 13:44:06
【问题描述】:

我有一个控制器类如下:

public partial class GenericViewController : Controller
    {
        public virtual void StoreUrl(string url)
        {
            Session["URL"] = url;
        }
    }

我正在尝试使用 jquery ajax 调用此方法,如下所示:

    $.ajax(
                {
                    type: "POST",
                    cache:false,
                    url: "http://" + baseUrl + "/GenericView/StoreUrl",
                    data: { url: applicationurl },
                    error: Error
                });

现在当我触发 ajax 调用时,出现以下错误

[HttpException]: The controller for path '/GenericView/StoreUrl' was not found or does not implement IController.
   at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
   at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
   at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<BeginProcessRequest>b__2()
   at System.Web.Mvc.SecurityUtil.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust[TResult](Func`1 func)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我已尝试在注册路由中执行以下操作来解决此问题,但我仍然收到相同的错误

 routes.IgnoreRoute("Ignore/");
 routes.IgnoreRoute("{*GenericView}", new { GenView= @"(.*/)?GenericView(/.*)?" });
 routes.RouteExistingFiles = false;
 routes.IgnoreRoute("GenericView/{*pathInfo}");

附加说明:此代码托管在名为 LookupData 的应用程序中,该应用程序托管在与 url abc.com 映射的 IIS 网站下作为应用程序托管,然后 abc.com 托管一个执行身份验证的应用程序,abc.com/LookupData 将命中托管上述代码的应用程序。 Lookupdata 单独运行时不会引发此错误,但是当通过 abc.com 访问时,应用程序无法解析 GenericViewController。

我不明白我的代码中的错误在哪里。任何人都可以提出解决方案吗?

【问题讨论】:

  • 为什么类不完整?
  • 控制器是否允许 POST 请求?也许尝试将方法更改为“GET”只是为了看到你得到同样的错误。如果这也不起作用,问题出在路由上,您可以发布路由定义吗?
  • @Tallmaris POST 和 GET 都有同样的问题。除了忽略路由之外,我在路由定义中还有以下内容: routes.MapRoute("Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = " Account", action = "LogOn", id = UrlParameter.Optional } // 参数默认值 );
  • 这里瞎猜,能不能把方法中的参数名从url改成id,还有ajax调用呢? MVC 对参数名称非常挑剔......或者,将路由定义更改为将 url 而不是 id 作为可选参数(如果这当然不会破坏其他控制器!)
  • @Tallmaris 我试过了,但没有帮助。

标签: asp.net-mvc jquery asp.net-mvc-routing


【解决方案1】:

您解决此问题的一个解决方案实际上添加了一个错误:

routes.IgnoreRoute("GenericView/{*pathInfo}");

这会导致 Mvc 忽略任何到“GenericViewController”的路由——除非你没有使用“约定优于配置”——因此不会在其上调用任何方法(如 StoreUrl)。

添加

routes.IgnoreRoute("{*GenericView}", new { GenView= @"(.*/)?GenericView(/.*)?" });

可能有相同的结果。

只需删除 routes.IgnoreRoute("{*GenericView}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2017-10-27
    • 2016-10-04
    • 1970-01-01
    相关资源
    最近更新 更多