2015-12-21 22 views
0

我正在嘗試使用API​​設置Asp.Net表單網站。 我已成功添加了選擇性驗證,因此啓動「\ api \」的頁面不會重定向,而是會針對基本身份驗證提出挑戰。 我現在正在嘗試使用MS Web Api 2來執行API路由。如何將可選的URI參數路由到API控制器功能

這個想法是儘可能RESTful。我有一個資源,一個TradableItem,最初我希望允許API用戶以兩種方式之一使用HTTP GET。

如果API用戶通過沒有項目鍵,如果API用戶通過一個項目密鑰作爲URI的一部分用戶接收可能項目鍵

["ABC","DEF"...] 

的列表,例如「/ API /貿易品/ abc「,則返回具有密鑰= ABC的那個TradableItem的表示。 (據我的理解,這是標準的REST行爲)。

在Global.asax中的的Application_Start()函數我有一個路線圖是這樣的...

RouteTable.Routes.MapHttpRoute(
     name: "TradableItemVerbs", 
     routeTemplate: "api/tradables/{item}", 
     defaults: new { item = System.Web.Http.RouteParameter.Optional, controller = "Tradable" }); 

的TradableController.cs文件看起來像這樣...

public class TradableController : ApiController 
{ 
    private static CustomLog logger = new CustomLog("TradableController"); 

    // GET api/<controller> 
    public IEnumerable<string> GetKeys() 
    { 
    var prefix = "GetKeys() - "; 
    string msg = ""; 

    msg = "Function called, returning list of tradable pkeys..."; 
    logger.Debug(prefix + msg); 

    // Get a list of tradable items 
    return TradableManager.GetTradablePkeys(); 
    } 

    // GET api/<controller>/<pkey> 
    public string GetTradable(string pkey) 
    { 
    string msg = string.Format("Would get Tradable data for key: >{0}<", pkey); 
    return msg; 
    } 
} 

的問題是隻有GetKeys()函數會觸發,無論我是否將GET調用到「/ api/tradables」或「/ api/tradables/abc」。

僅供參考,使用VS2015社區,IIS 7.5,目標.Net 4.6.1。我使用Rick Strahl的博客作爲此指南(以及其他來源)。

http://weblog.west-wind.com/posts/2012/Aug/21/An-Introduction-to-ASPNET-Web-API#HTTPVerbRouting

回答

1

請改變你的特性參數的項名稱(因爲,這是名稱定義的路線):

public string GetTradable(string item) 
{ 
    .... 
} 

或當你調用該方法是明確與參數名稱:/api/tradables?pkey = abc

+0

謝謝@ julito-avellaneda,這工作。我假設函數將使用類型,而不是變量的顯式名稱。你有沒有WebAPI2初學者教程的任何好鏈接(最好是非MVC,但不管)。 –

+0

Hi @SteveHibbert您可以從http://www.asp.net/web-api開始,然後閱讀apress書籍:http://www.apress.com/catalogsearch/result/?q=web+api&submit=Go –

相關問題