2

我的机器上的 StructureMap 工作正常。一切都很好......直到我请求一个不存在的资源。我得到一个 500 错误,而不是 404。

例如。http://localhost:6969/lkfhklsfhskdfksdf

检查网络,我被告知要修复我的结构图控制器类。做到了,很高兴!我现在得到-原始默认404黄屏页面-。好的,这比我的 500 错误页面要好。

但是,我希望它转到我的自定义 404 页面 :( 如果我在合法控制器上调用错误操作,我会得到我的自定义 404 页面。

在我的 global.asax 中,我有我的自定义路由,然后是默认路由,最后是 404 路由:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Post", action = "Index", id = "" } // Parameter defaults
    );

// Invalid/Unknown route.
routes.MapRoute(
    "404-ResourceNotFound",
    "{*url}",
    new { controller = "StaticContent", action = "ResourceNotFound" }
    );

这是我的结构图控制器代码:

public class StructureMapControllerFactory: DefaultControllerFactory {
    protected override IController GetControllerInstance(Type controllerType) {
        if (controllerType != null) {
            return ObjectFactory.GetInstance(controllerType) as Controller;
        return base.GetControllerInstance(controllerType);
    }
}

有任何想法吗?有什么方法可以让结构映射控制器工厂重新回到global.asax路由列表中?还是我做了一些非常糟糕的事情,需要修复一些其他的东西。

干杯!

4

1 回答 1

2

嗯......似乎这可能是一个例外。就像 MVC 旨在通过异常处理 404 错误的方式一样。

这是我的代码:

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        IController result = null;
        try
        {
            result = ObjectFactory.GetInstance(controllerType) as Controller;
        }
        catch (StructureMapException)
        {
            System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
            throw;
        }

        return result;
    }
}

..您甚至可能已经拥有并更改了它。如果没有,请尝试一下,看看是否有区别。我不怀疑会有。

也许只是尝试闯入该覆盖并查看引发了哪些异常。

(旁注:奇怪的是,我总是在你的问题上绊倒克罗姆。你在做什么?)

编辑:我尝试了装束请求并得到了同样的例外。所以我像你一样更新了我的课程。

我的新课:

public class StructureMapControllerFactory : DefaultControllerFactory
{
    protected override IController GetControllerInstance(Type controllerType)
    {
        if (controllerType == null)
            return base.GetControllerInstance(controllerType);

        IController result = null;
        try
        {
            result = ObjectFactory.GetInstance(controllerType) as Controller;
        }
        catch (StructureMapException)
        {
            System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
            throw;
        }

        return result;
    }
}

..这似乎给了我应有的404 ..但我从来没有得到开发中的自定义错误页面(本地)..我必须等到我发布之前我得到那些。您是否习惯于在 dev 中看到自定义错误页面?

于 2009-06-01T05:25:49.913 回答