• ASP.NET MVC中Areas的namespaces和UseNamespaceFallback


    今天用ASP.NET MVC的时候,测试Areas区域发现一个问题,例如:

    Areas - Apps -Controllers - DemoController.cs

                       -Views - Demo - Index.cshtml

    Controllers – 无

    Views – 无

    此时进行路由测试,却意外发现:

    http://localhost/Apps/Demo 这个URL正常访问没问题

    http://localhost/Demo 却不是找不到页面,而是会执行DemoController到但报错找不到Index.cshtml这个View

    可见如果根目录下的Controller中没有DemoController的时候

    http://localhost/Demo竟然也会被路由到Areas -> Apps -> Controllers文件夹下的DemoController

    这样的URL路由规则明显是不够严谨的!这并不是预期设计的结果!

    后来爬到文章,发现如果在当前的命名空间找不到Controller,MVC会自动去搜寻别的Controller,晕倒,

    所以必须在MapRoute时加上参数namespaces和属性DataTokens["UseNamespaceFallback"] = false;

    代码如下(标红),这样,MVC才会锁定在指定的NameSpace下寻找,经测试后正常。

    示例文件:RouteConfig.cs

     1 public static void RegisterRoutes(RouteCollection routes)
     2 {
     3     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     4 
     5     routes.MapRoute(
     6         name: "Default",
     7         url: "{controller}/{action}/{id}",
     8         defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
     9         namespaces: new string[] { "MvcTest.Controllers" }
    10     ).DataTokens["UseNamespaceFallback"] = false;
    11 }

    示例文件:AppAreaRegistration.cs

    1 public override void RegisterArea(AreaRegistrationContext context)
    2 {
    3     context.MapRoute(
    4         "Apps_default",
    5         "Apps/{controller}/{action}/{id}",
    6         new { action = "Index", id = UrlParameter.Optional },
    7         new string[] { "MvcTest.Areas.Apps.Controllers" }
    8     ).DataTokens["UseNamespaceFallback"] = false;
    9 }
  • 相关阅读:
    AsyncTask的用法
    关于 android setAnimationStyle 的问题
    android有关bluetooth常用api简介
    Android调用系统Activity选取图像部分区域
    Android 关于ListView几个特别的属性
    Android应用界面动画切换(主要Tabhost中跳转出来的动画效果解决[转]
    ✿Android 3.1 久违的 USB、mtp、rtp
    读《C++沉思录》心得:拷贝构造函数
    Cloud Foundy入门
    HDFS读文件详解
  • 原文地址:https://www.cnblogs.com/yipu/p/2780119.html
Copyright © 2020-2023  润新知