1

我的 Web API 控制器中有两种方法,如下所示:

public samplecontroller: webapicontroller
{

     [HttpPost]    
     public void PostMethod()

     [HttpGet]
     public void GetValues(int a,int b)
}

我在 global.asax 中有以下内容:

 routes.MapHttpRoute

 ("Default API Route", "api/{controller}/{id1}/{id2}/{id3}/{id4}/{id5}", 

  new { id1 = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional });

如果我想调用第二种方法,即,GetValues(int a,int b)我可以在 Global.asax 中再写一个 HttpRoute 如下吗?

routes.MapHttpRoute(
     name: "ActionApi",
     routeTemplate: "api/{Sample}/{GetValues}/{a}/{b}",
     defaults: new { a = UrlParameter.Optional, b=UrlParameter.Optional }
);

那么我可以在 global.asax 中创建多个 maproute 吗?

而且,为了提供可选参数,我是否应该只提供与 a 和 b 等参数相同的参数?

4

1 回答 1

0

你可以在 global.asax 中有多个路由;每个传入的请求都将转到匹配的第一个路由。这意味着更具体的应该先行。如果满足以下条件,则 URL 与路由匹配:

  1. controllerrouteaction值已定义。
  2. 定义了所有必需的路由值(路由中大括号中的值,以及 Action 中的不可为空的参数)。

也就是说,您提出的路线api/{Sample}/{GetValues}/{a}/{b}没有意义。它创建了两个新的(无意义的)路由值Sampleand GetValues,并且不提供定义controlleror action。我想你的意思是这样写的:

routeTemplate: "api/Sample/GetValues/{a}/{b}",
defaults: new { controller: "Sample", action: "GetValues", a = UrlParameter.Optional ,b=UrlParameter.Optional }

这将使 URI/api/Sample/GetValues/1/2与您的操作相匹配。

routeTemplate: "api/Sample/GetValues/{a}/{b}",
defaults: new { controller: "Sample", action: "GetValues", a = UrlParameter.Optional ,b=UrlParameter.Optional }
于 2012-09-02T04:26:24.813 回答