ASP.NET MVC - Catch All Route And Default Route

后端 未结 8 1852
伪装坚强ぢ
伪装坚强ぢ 2020-11-28 04:15

In trying to get my application to produce 404 errors correctly, I have implemented a catch all route at the end of my route table, as shown below:

 routes.M         


        
相关标签:
8条回答
  • 2020-11-28 04:52

    Well, what I have found is that there is no good way to do this. I have set the redirectMode property of the customErrors to ResponseRewrite.

    <customErrors mode="On" defaultRedirect="~/Shared/Error" redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/Shared/PageNotFound"/>
    </customErrors>
    

    This gives me the sought after behavior, but does not display the formatted page.

    To me this is poorly done, as far as SEO goes. However, I feel there is a solution that I am missing as SO does exactly what I want to happen. The URL remains on the failed page and throws a 404. Inspect stackoverflow.com/fail in Firebug.

    0 讨论(0)
  • 2020-11-28 04:54
    //this catches all  requests
    routes.MapRoute(
        "Error",
        "{*.}",
         new { controller = "PublicDisplay", action = "Error404" } 
    );
    

    add this route at the end the routes table

    0 讨论(0)
  • 2020-11-28 04:55

    I would recommend this as the most readable version. You need this in your RouteConfig.cs, and a controller called ErrorController.cs, containing an action 'PageNotFound'. This can return a view. Create a PageNotFound.cshtml, and it'll be returned in response to the 404:

            routes.MapRoute(
                name:  "PageNotFound",
                url:  "{*url}",
                defaults: new { controller = "Error", action = "PageNotFound" }
            );
    

    How to read this:

    name: "PageNotFound"
    

    = create a new route template, with the arbitrary name 'PageNotFound'

    url:"{*url}"
    

    = use this template to map all otherwise unhandled routes

    defaults: new { controller = "Error", action = "PageNotFound" }
    

    = define the action that an incorrect path will map to (the 'PageNotFound' Action Method in the Error controller). This is needed since an incorrectly entered path will not obviously not map to any action method

    0 讨论(0)
  • 2020-11-28 04:58

    You are probably better off configuring the 404 error document in the section of the configuration then restoring the default route.

    FWIW, I think the default route requirement is retarded too.

    0 讨论(0)
  • 2020-11-28 04:59

    If you're looking for ASP.NET Core catch all routes and searching Google for asp.net core catch all route brings you here:

    ASP.net core MVC catch all route serve static file

    0 讨论(0)
  • 2020-11-28 05:04

    Ah, the problem is your default route catches all 3 segment URLs. The issue here is that Routing runs way before we determine who is going to handle the request. Thus any three segment URL will match the default route, even if it ends up later that there's no controller to handle it.

    One thing you can do is on your controller override the HandleMissingAction method. You should also use the tag to catch all 404 issues.

    0 讨论(0)
提交回复
热议问题