2012-12-27 47 views
0

我正在使用Visual Studi0 2010.在我的WebApiConfig.cs文件中我有下面的配置文件,我可以映射这两个URL /Values/Values/1。它工作正常。Asp.net Web API:在控制器上没有发现任何操作

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new {id= RouteParameter.Optional } 
     ); 

因为我想喜欢/Values/Machines/Values/Machines/100我的自定义URL,我在上面设置更改如下。

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new {action="get", id= RouteParameter.Optional } 
     ); 

它现在映射到网址以下,除了这一个,/Values/1。请让我知道我缺少什么。

1./Values 
2./Values/Machines 
3./Values/Machines/100 

谢谢。

+0

我可以看看你的ValueController吗? –

回答

2

它是预期的行为。根据你的新干线的第一个参数Values有望成为一个控制器名称,并有望成为一个行动第二个参数1,但你没有名为1

的行动,以获取到操作您需要用你的网址新途径应该像这样:/Values/Index/1

你可以做这样的事情:

routes.MapRoute(
    name: "IndexWithParam", 
    url: "{controller}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    constraints: new { id = @"\d+" } 
); 

routes.MapRoute(
    name: "Default", // Route name 
    url: "{controller}/{action}/{id}", // URL with parameters 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

在这种情况下,如果URL是这样的:/Values/1,它会先出手路线并将其重定向到/Values/Index/1。请注意,我已经对此路线设置了一个约束,以确保第二个参数是一个数字。

+0

谢谢。有没有办法达到这个目的?通过更改MapHttpRoute或具有多个MapHttpRoute?请指教。 – APeter

+0

请看更新的答案 – Dmitry

相关问题