2015-10-13 136 views
1

我努力使路由前缀工作或可能有误解有关的ASP.NET Web API路线ASP.NET路由不工作

这里是我的代码:

public class TestController : ApiController 
    { 
    // GET: api/Test 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET: api/Test/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 
    [HttpGet] 
    [Route("GetValue")] 
    public string GetValue(int id) 
    { 
     return "best"; 
    } 
    [HttpGet] 
    [Route("GetValue1")] 
    public string GetValue1(int test) 
    { 
     return "GetValue"; 
    } 
} 

这里的状态每个呼叫

  1. localhost:52154/api/test/Getvalue1/1(HTTP错误404.0 - 未找到)
  2. localhost:52154/api/test/Getvalue1?test=1( 的网页无法找到)
  3. localhost:52154/api/test/Getvalue?id=1(作品回归 “价值”,但不会调用getValue方法)
  4. localhost:52154/api/test/1(工程回报 “值”)
  5. localhost:52154/api/test/(工程回报 “值1”, “值2”)

请让我知道该怎么做,使GetValue1和GetValue路线工作。我没有更新的NuGet pacakge为ASP.NET对Web API 2.2

WebApiConfig看起来像这样

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

礼貌你能告诉我们你的WebApiConfig如果所做的更改吗? – Marusyk

+0

我不认为在你的路由名称中使用'Get'将会起作用,因为它是一个已经被翻译的特殊术语。尝试'[路由(“RetriveValue”)]' – user326608

+1

它似乎像你的web api路由没有正确配置。使用默认路由,所有获取请求将被映射到Get方法,Posts to Post方法等。很可能您的WebApiConfig.cs有一行包含'routeTemplate:“api/{controller}/{id}'”,您应该更改为'routeTemplate:“api/{controller}/{action}/{id}”'来映射操作。你的'[Route]'属性不需要这个。 –

回答

1

这里是为我工作 公共IEnumerable的获取(){ 回报 新的字符串[] { “值1” 的解决方案, “值2”}; }

// GET: api/Test/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 
    [HttpGet] 

    public string GetValue(int id) 
    { 
     return "best"; 
    } 


    [HttpGet] 

    public string RetriveValue(int test) 
    { 
     return "GetValue"; 
    } 

How to bypass the exception multiple actions were found in ASP.NET Web API

0

使用:[ActionName("Getvalue1")]

希望这个作品!