【问题标题】:ASP.NET MVC Action Gives 404 on Certain Params?ASP.NET MVC 操作在某些参数上给出 404?
【发布时间】:2010-10-31 06:20:57
【问题描述】:

我的 MVC 站点出现一个奇怪的错误。我的控制器中有一个动作响应 {controller}/{action}/{id} 的默认路由 - 在我的例子中是 /Project/Client/{id}。

根据我传递给它的 id,我得到一个错误。关闭 Elmah,这是一个直接的 ASP.NET 404 错误。打开 Elmah 会给我以下信息:

System.Web.HttpException
   at System.Web.CachedPathData.GetConfigPathData(String configPath)
   at System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp)
   at System.Web.HttpContext.GetFilePathData()
   at System.Web.HttpContext.GetConfigurationPathData()
   at System.Web.Configuration.RuntimeConfig.GetConfig(HttpContext context)
   at System.Web.HttpContext.get_ImpersonationToken()
   at System.Web.ClientImpersonationContext.Start(HttpContext context, Boolean throwOnError)
   at System.Web.HttpApplication.ThreadContext.SetImpersonationContext()
   at System.Web.HttpApplication.ThreadContext.Enter(Boolean setImpersonationContext)
   at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
   at System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(Exception error)

这只发生在某些 ID 参数上。例如

/Projects/Client/ABC -- works
/Projects/Client/DEF -- works
/Projects/Client/GHI -- 404
/Projects/Client/JKL -- works

等等……

有什么线索吗?

【问题讨论】:

  • 您的应用程序中是否设置了其他路由?
  • 我有一个也添加了页面参数,所以 {controller}/{action}/{id}/{page}
  • 您是否对“GHI”示例进行了单元测试?这将有助于确保您确实有路由问题,而不是控制器逻辑中的问题。

标签: asp.net-mvc routes http-status-code-404


【解决方案1】:

您可以使用 Phil Haacks 路由调试器来了解正在调用哪些路由 在这里阅读: http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

【讨论】:

  • 这并没有发现任何问题,但它向我介绍了一个漂亮的新工具,它解决了另一个项目中的问题,所以在没有更好的解决方案的情况下将答案授予你。
【解决方案2】:

您应该查看的一件事是您网站中的 web.config 文件。堆栈跟踪的顶部;

at System.Web.CachedPathData.GetConfigPathData(String configPath)

看起来是一个调用来确定 web.config 的位置。可能是您的路由 (/Project/client/id) 定义的虚拟文件系统与可能存在于 ~/Project/web.config 的 web.config 冲突

这有点像从堆栈跟踪中衍生出来的狂野刺伤,但不应该花太长时间来判断它是否可能是一个问题。

【讨论】:

    【解决方案3】:

    如果其他人出现在此页面上但没有找到他们正在寻找的解决方案,则 URL 中不允许使用某些字符串。在此处阅读:

    Weird 404 error in ASP.NET MVC when including "con"

    解决方案是 Microsoft 的另一个“WorkProperly”标志(其默认值为“false”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2021-02-14
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多