ASP.NET MVC Action在某些参数上给出了404?

时间:2009-06-04 08:52:09

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

我的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

依旧......

任何线索?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

这是一个从堆栈跟踪中得到的狂野刺激,但是不应该花太长时间才能看出它是否有问题。

答案 2 :(得分:0)

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

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

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