【发布时间】:2016-06-03 17:12:30
【问题描述】:
我的问题是这样的
为了让 Mvc Surface 控制器在 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!");
}
}
当我导航到我认为应该是我的 Index() 方法的路径时,我收到一个 YSOD,说找不到资源:
代码没有执行,显示上述错误;但是,如果我将 Uri 更改为垃圾,则会收到 IIS 404 错误:
我开始在现有站点中使用它,以为我的站点搞砸了,我在 Umbraco 6.1.6 的新副本中尝试了它,并得到了完全相同的结果。
作为记录,我还尝试了MembersSurfaceController 及其关联的 Uri,其结果与上述完全相同。当我点击有效路由时是 YSOD,当我没有点击时是 IIS 404。
我也将/config/ 目录中的umbracoSettings.config 更改为MVC。
更新
我正在使用开箱即用的 web.config 文件,其中包含:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRewriteModule" />
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
.
..
...
在我的默认 Umbraco 网站上,我没有定义任何重写规则;但在我的实际站点上,我有几个重写规则。我认为这不是导致它的原因,因为我在两个网站上都看到了相同的行为......
我已经尝试完全删除 UrlRewrite 我得到了相同的结果。
【问题讨论】:
-
您是否检查过是否需要 IIS 中的 UrlRewrite 模块?可能值得检查...
-
我不确定你的意思,我正在运行开箱即用的 web.config。
-
我可以复制这个问题,但只能通过将我的控制器放在 App_Code 文件夹(Umbraco v6.1.3)中 - 如果它们被遵守,似乎没有问题。这是一个很长的镜头,但是您能否编译控制器(通过添加一个类库,将控制器移动到那里,如果您的项目是一个网站,则将您的网站的引用添加到类库中)然后再试一次?
-
@milquetoastable 我还没有尝试过(我会的),但对于我当前的网站来说,这感觉有点矫枉过正。
-
编译控制器将解决这个问题,但我想知道您(或其他任何人)是否曾经想过是否可以在 App_Code 文件夹中添加控制器。目前我自己也遇到了同样的问题。创建一个单独的库似乎有些“矫枉过正”。
标签: c# .net asp.net-mvc umbraco