电脑运行clash占用资源
其中,controller、action、area、page 这些字段名用于专属匹配。比如 controller 匹配控制器名称等。这个老周不必多说了,大伙伴们都知道。
大括号({ })括起来的字段是全局路由。这些路由可以用于当前应用中所有未指定特性化路由的控制器。
上面代码中第二条路由,由于URL模板缺少了 controller 字段,所以 defaults 参数要设定它调用的控制器是 Home。
此规则通过 [Route]、[HttpGet]、[HttpPost] 等特性类,在控制器类或方法上配置的路由规则。
这样的规则会进行合并。即控制器上的是”abc“,方法上是”xyz“,所以你要调用Greeting方法就要访问URL:
2、你想弄个前缀,但这个前缀可能不是固定的。比如,加个命名空间做前缀,像 。这个命名空间的名称要通过编程,在程序运行的时候获取,而不是硬编码。
这样的话,就可以用到应用程序模型——其实我们这一系列文章都离不开应用程序模型,因为整个MVC应用程序的自定义方式都与其有关。
所以这种方案也是通过实现自定义的约定接口来完成的,其中主要是用到 AttributeRouteModel 类。
它的功能与直接用在控制器或方法上的 [Route] 特性差不多,只不过这个类能让我们通过编程的方式设置路由URL。
也就是 Template 属性,它是一个字符串,跟 [Route] 中设置的URL一样的用途,比如
假设当前程序集名为 MyHub,控制器名为 Home,操作方法为 Goodbye,那么,调用 Goodbye 方法的URL是:。
这个都是应用程序在运行后自动设置的,要是程序集改名为 MyGooood,那么URL前缀就自动变为 /mygooood。
从以上分析看,此约定要改控制器的路由,也要改操作方法的路由,所以,实现的约定接口应为 IControllerModelConvention。下面是代码:
不管是控制器的还是操作方法的,都允许设置多个SelectorModel对象。这就类似我们在控制器上可以设置多个 [Route]。
我的意思是如果你在控制器或操作方法上用了 [Route] 特性,那么这里就跳过,不要再修改它。
CombineTemplates 是静态方法,它可以帮我们自动拼接URL,只要你把两段URL传递给它就行了。
注意啊,这样设置后,约定是作用于全局的,应用程序内的控制器都会应用。你如果只想局部用,那就定义了特性类(从Attribute类派生),实现原理一样的。你可以参考老周在上上篇中举到的自定义控制器名称的例子。
现在,如果套用了我们刚写的 CustControllerConvension 约定后,两个功能合在一块儿了,那这个控制器该怎么访问呢。
接着,它的 Greeting 方法是有 [Route] 特性的电脑运行clash占用资源,根据咱们的代码逻辑,是保留已有的路由的,所以,”haha/hehe“被保留。
老周再曰:其实啊,这个也不是完全没用的。老周前文说过的,如果你的URL中有某部分是要通过代码来获取,而不是硬编码的话,那这种折腾就有用了。总之,一句话:技巧老周都告诉你了,至于怎么去运用,看实际需要呗。




