相关疑难解决方法(0)

在使用IOCControllerFactory时,抛出类似StackOverflow的404,没有重定向

我在这里发现了另一个问题,它提供了我的问题的第一部分的解决方案,即如何在ASP.NET MVC中生成404页面而不重定向到另一个页面(因此最初请求的URL保留在地址栏中).

ASP.NET MVC - 如何抛出类似于StackOverflow上的404页面

protected void Application_Error(object sender, EventArgs e)
    {
        var exception = Server.GetLastError();

        Response.Clear();
        var httpException = exception as HttpException;
        var routeData = new RouteData();
        routeData.Values.Add("controller", "Error");

        if (httpException != null)
        {
            routeData.Values.Add("action", httpException.GetHttpCode() == 404 ? "NotFound" : "Unknown");

            // clear the error, otherwise, we will always get the default error page.
            Server.ClearError();

            // call the controller with the route
            IController errorController = new ErrorController();
            errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));

        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我不使用IOCControllerFactory,404方面的工作对我来说很好,但是一旦我使用工厂,不 …

error-handling asp.net-mvc ioc-container asp.net-mvc-3

12
推荐指数
1
解决办法
6011
查看次数

ASP.NET MVC - 使用Reflection查找控制器是否存在

我有一点时间搞清楚如何正确实现我的404重定向.

如果我使用以下内容

<HandleError()> _
Public Class BaseController : Inherits System.Web.Mvc.Controller
''# do stuff
End Class
Run Code Online (Sandbox Code Playgroud)

然后页面上任何未处理的错误将加载"错误"视图,该视图效果很好. http://example.com/user/999(其中999是无效的用户ID)会在保留原始URL时抛出错误(这就是我想要的)

然而.如果有人将http://example.com/asdfjkl输入到url(其中asdfjkl是无效的控制器),则IIS将抛出通用404页面.(这不是我想要的).我需要的是上面要应用的相同内容.原始URL保留,并加载"NotFound"控制器.

我正在注册这样的路线

Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.RouteExistingFiles = False
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
    routes.IgnoreRoute("Assets/{*pathInfo}")
    routes.IgnoreRoute("{*robotstxt}", New With {.robotstxt = "(.*/)?robots.txt(/.*)?"})

    routes.AddCombresRoute("Combres")

    routes.MapRoute("Start", "", New With {.controller = "Events", .action = "Index"})

    ''# MapRoute allows for a dynamic UserDetails ID
    routes.MapRouteLowercase("UserProfile", "Users/{id}/{slug}", _
                             New With {.controller = "Users", .action = "Details", .slug = UrlParameter.Optional}, _
                             New With {.id = "\d+"} …
Run Code Online (Sandbox Code Playgroud)

reflection routing constraints asp.net-mvc-2

5
推荐指数
2
解决办法
3336
查看次数

为缺少的ASP.Net MVC控制器更正404消息

我有一个MVC 2应用程序,应该总是提供一个"漂亮的"404页面.

但是目前我得到了一个低级别的.Net:"'/ sitename'应用程序中的服务器错误..."

我有一个基本控制器,它有一个NotFound动作,将呈现漂亮的404页面.

处理缺失的操作:

protected override void HandleUnknownAction(string actionName)
{
    this.NotFound(actionName).ExecuteResult(this.ControllerContext);
}
Run Code Online (Sandbox Code Playgroud)

所以访问{site}/ValidController/NotAnAction正确地路由.

但是访问{site}/NotAController没有.

我设置的路线全部为:

routes.MapRoute(
    "MVC routes",
    "{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional });

routes.MapRoute(
    "Catch All", 
    "{*url}",
    new { controller = "System", action = "NotFound" });
Run Code Online (Sandbox Code Playgroud)

catch全部正确捕获不匹配的路由.

所以{site}/Invalid/Action/id/extra通过catch all正确路由.

然而{site}/Invalid,通过"MVC路由"路由获取并且ASP.Net寻找InvalidController,并且当它找不到时抛出一个愚蠢的异常.

我知道我可以在web.config关卡中覆盖它,但这只是重定向到页面.我想知道路由模式何时匹配但控制器不是有效的控制器名称.

我在哪里可以捕捉并改变这种行为?

asp.net-mvc routing asp.net-mvc-routing asp.net-mvc-2

3
推荐指数
1
解决办法
4060
查看次数