当前位置:  开发笔记 > 后端 > 正文

.Net MVC Routing Catchall无效

如何解决《.NetMVCRoutingCatchall无效》经验,为你挑选了2个好方法。

我似乎无法弄清楚这一点.我正在尝试使用MVC Beta,我正在尝试实现一个catchall路由,这样如果用户输入mysite.com/blah而不是mysite.com/home/index,它将会出现"错误"路径.

不幸的是,似乎"默认"路线总是首先捕获"嘘声".事实上,我唯一能够进入"错误"路线的路线是blah/blah/blah/blah.

这是它应该工作的方式,因为我已经看到其他示例具有"默认"和"错误"路由设置就像这样,似乎如果他们要键入一个不存在它的控制器会点击"错误"路线.

有什么我缺少的(很可能)或者我只需要为每个控制器创建一个特定的路由?

我正在使用的代码:

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

        routes.MapRoute(
            "Error",
            "{*catchall}",
            new { controller = "Base", action = "Error", id = "404" }
        );

谢谢杰夫



1> Darin Dimitr..:

为了处理错误,我在我的一个项目中使用了Application_Error事件:

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    HttpException httpException = exception as HttpException;
    if (httpException != null)
    {
        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Error");
        routeData.Values.Add("action", "HttpError500");

            if (httpException.GetHttpCode() == 404)
            {
                routeData.Values["action"] = "HttpError404";
            }

        Server.ClearError();
        Response.Clear();
        IController errorController = new ErrorController();
        errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
    }
}



2> 小智..:

您的第一条路线将捕获大多数网址,因为您有元素的默认值,您可以使用Phil Haack的路径调试器将其可视化,请参阅链接:

路由调试器

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有