为什么我在默认/ OOTB Umbraco安装上的Umbraco SurfaceController上获得黄色死亡屏幕?

Nat*_*ate 5 .net c# asp.net-mvc umbraco

我的问题是这个

我错过了哪些配置步骤让Mvc Surface Controllers在Umbraco中工作?

我的理论是,因为默认的Umbraco安装中有一个文件夹,/umbraco/用于连接到CMS,物理路径与路由交互,/umbraco/surface/{Controller}/{Action}从而产生ASP.NET YSOD(当我尝试访问时,还有IIS 404)该路由上未定义的控制器.)


背景资料


我已将此类添加到我App_Code刚刚下载的Umbraco 6.1.6副本中的文件夹中:

public class MembersController : SurfaceController
{
    public ActionResult Index()
    {
        return Content("Hello, Member!");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我导航到我认为应该是我的Index()方法的路线时,我得到一个YSOD,表示无法找到资源:

路径到路径的YSOD

代码未执行,显示上述错误; 但是,如果我将Uri更改为垃圾,我会收到IIS 404错误:

路由到不存在路径的IIS 404错误

我开始在现有网站上看到这个,认为我的网站搞砸了我在Umbraco 6.1.6的新副本中尝试了它并得到了完全相同的结果.

为了记录,我也尝试了MembersSurfaceController它和它相关的Uri,它具有与上面完全相同的结果.当我点击有效路线时是YSOD,而当我没有时,是IIS 404.

我也在目录中将我umbracoSettings.config改为MVC /config/.


更新


我正在使用开箱即用的web.config文件,其中包含:

 <system.webServer>
     <validation validateIntegratedModeConfiguration="false" />
     <modules runAllManagedModulesForAllRequests="true">
         <remove name="UrlRewriteModule" />
         <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
         .
         ..
         ...
Run Code Online (Sandbox Code Playgroud)

在我的默认Umbraco网站上,我没有定义任何重写规则; 但在我的实际网站上,我有几个重写规则.我认为这不会导致它,因为我在两个网站上都看到相同的行为,但......

我试过UrlRewrite完全删除我得到相同的结果.


ani*_*rov 3

以下方法在 Umbraco 7.1 中适用于我,我希望它也适用于 6.1:

在 App_Code 文件夹中创建名为“Controllers”的文件夹,并将表面控制器放入其中(以便它们位于“Controllers”命名空间内)。

例如,我在 App_Code\Controllers 文件夹中(因此在“Controllers”命名空间内)有以下控制器:

namespace Controllers
{
    public class ServiceCentersController : SurfaceController
    {
        public ActionResult GetServiceCenters(string country = "", string region = "", string city = "")
        {
        ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的站点在本地主机上运行,​​因此我可以通过导航到以下位置来调用 GetServiceCenters 操作:

http://localhost/umbraco/Surface/ServiceCenters/GetServiceCenters?country=aa&region=bb&city=cc
Run Code Online (Sandbox Code Playgroud)

  • 为了让我的控制器工作,我必须手动将 `namespace Controllers { .. }` 代码添加到我的文件中。文件夹名称似乎并不重要,重要的是实际的命名空间。看起来,使用网站项目 File=&gt;New 确实会插入命名空间,就像在 Web 应用程序项目类型中一样。 (3认同)