NOVOTS KMS 词汇表 Glossary    联系我们 Contact Us
查询 Search  
   
按类别浏览 Browse by Category
NOVOTS KMS .: 工作心得 .: Web Api Route 注册要放在 Mvc Route 注册前

Web Api Route 注册要放在 Mvc Route 注册前

今天想研究一下Web Api,写了一个测试Api,打开网站后浏览一下,可是却提示找不到方法,刚开始以为哪里配置错了,可找了半天也没见。

因为我是在一个现有Mvc站点做的Demo,所以打算新建一个Mvc网站,再试一下,新站点是正常的,对比一下Global文件,发现WebApiConfig和RouteConfig顺序不一样。

如果把新站点的RouteConfig也放在WebApiConfig之前,同样提示找不到方法。看来这两个配置有关联呀。

1
2
WebApiConfig.Register(GlobalConfiguration.Configuration);
RouteConfig.RegisterRoutes(RouteTable.Routes);

  看了一下GlobalConfiguration类就明白了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static class GlobalConfiguration
{
 private static Lazy<HttpConfiguration> _configuration = new Lazy<HttpConfiguration>(delegate {
 HttpConfiguration configuration = new HttpConfiguration(new HostedHttpRouteCollection(RouteTable.Routes));
 configuration.Services.Replace(typeof(IAssembliesResolver), new WebHostAssembliesResolver());
 configuration.Services.Replace(typeof(IHttpControllerTypeResolver), new WebHostHttpControllerTypeResolver());
 configuration.Services.Replace(typeof(IHostBufferPolicySelector), new WebHostBufferPolicySelector());
 return configuration;
 });
 public static HttpConfiguration Configuration
 {
 get
 {
 return _configuration.Value;
 }
 }
  
 //...
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class RouteConfig
 {
 public static void RegisterRoutes(RouteCollection routes)
 {
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 
 routes.MapRoute(
 name: "Default",
 url: "t/{controller}/{action}/{id}",
 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
 );
 }
 }
 
 public static class WebApiConfig
 {
 public static void Register(HttpConfiguration config)
 {
 config.Routes.MapHttpRoute(
 name: "DefaultApi",
 routeTemplate: "api/{controller}/{id}",
 defaults: new { id = RouteParameter.Optional }
 );
 }
 }

  合并后的类似路由:

复制代码
 1             routes.MapHttpRoute(
 2                 name: "DefaultApi",
 3                 routeTemplate: "api/{controller}/{id}",
 4                 defaults: new { id = RouteParameter.Optional }
 5             );
 6             routes.MapRoute(
 7                 name: "Default",
 8                 url: "{controller}/{action}/{id}",
 9                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
10             );
复制代码

 

如果顺序反了,DefaultApi的路由就永远匹配不到了,会一直找MVC的路由"{api}/{action}/{id}"。


这篇文章对你多有用?

相关文章

article route map的一些讨论(转)
route map和ACL很类似,

(No rating)  3-25-2013    Views: 746   
article 策略路由
route...

(No rating)  9-1-2014    Views: 716   
article ip default-network和ip route 0.0.0.0 0.0.0.0默认路由的区别
指定默认路

  2-8-2007    Views: 1610   

用户评语

添加评语
当前还没有评语.


.: .: .: .: .:
[ 登陆 ]
北京护航科技有限公司 2006

Novots Technologies Limited