2013-12-13 41 views
1

所以我有2个控制器:如何设置控制器的默认操作?

[AllowCrossSiteJson] 
public class ItemController : ApiController { 
    [HttpGet] 
    public LinkedList<Object> FindItem([FromUri]ItemQuery query) { 
     .... 
    } 
} 

而且

[AllowCrossSiteJson] 
public class SubDepController : ApiController 
{ 

    [HttpGet] 
    public LinkedList<Object> FindSubDep(string ID) { 
     .... 
    } 
} 

这里是事,我打电话都:

http://localhost:43751/api/SubDep 

http://localhost:43751/api/Item 

和项目控制工作,但是SubDep确实不行!这是为什么?

这里是我的WebApiConfig:

public static void Register(HttpConfiguration config) { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
     config.Routes.MapHttpRoute(
      name: "withAction", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

我回来的错误是这样的:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:43751/api/SubDep'.","MessageDetail":"No action was found on the controller 'SubDep' that matches the request."} 

奖金的问题:

如何ASP.NET MVC知道我尝试点击:

http://localhost:43751/api/Item 

它会自动进入FindItem Action?这对我来说就像纯粹的魔术!

回答

1

当您尝试调用FindSubDep行动,您的查询字符串应该像belwo:

http://localhost:43751/api/SubDep/1 
+0

你是完全正确的,这就是原因。我使参数是可选的,它正确地调用了该函数。 – Bill

1

对于奖金问题。它得到正确的行动,因为在你的情况下,HTTP动词[GET],当你做出

http://localhost:43751/api/Item 

一个GET请求将找到项目控制器[HTTPGET]属性的作用。

+0

非常酷!从来没有想过这个。 – Bill

相关问题