2015-10-13 133 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")]

希望這個作品!