2016-04-29 52 views
0

我想將我的api鏈接到braintree支付系統。我正在使用OData,但我正在努力處理端點的路由。我一直收到404:未找到OData行動端點

未找到與請求URI'http://localhost:34403/odata/GetPlans'匹配的HTTP資源。

這裏就是我在WebApiConfig類註冊我的路線:

var GetPlans = builder.Action("GetPlans"); 

我應該用行動之外別的東西?也許還有別的東西?

這裏是終點,我試圖打:

[HttpGet] 
    [ODataRoute("GetPlans")] 
    public IHttpActionResult getPlans() 
    { 
     var gateway = new BraintreeGateway 
     { 
      Environment = Braintree.Environment.SANDBOX, 
      MerchantId = merchId, 
      PublicKey = pubKey, 
      PrivateKey = privKey 
     }; 

     List<Plan> plans = gateway.Plan.All(); 

     return Ok(plans); 

    } 

回答

1

操作所需要的POST HTTP動詞,但你有你的方法HttpGet屬性,將其更改爲POST之一,並確保您使用的是調用該方法時的POST動詞。或者,你可以改變這是一個功能,它使用一個GET,你就需要使用Function方法的建設者,而不是像這樣:

var GetPlans = builder.Function("GetPlans"); 

從操作和功能之間的差別的簡單總結http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-actions-and-functions

函數是沒有副作用,可以支持 進一步組成,並且必須返回類型的操作。

操作是允許修改副作用(例如數據 )並且不能進一步組合以避免 非確定性行爲的操作。

操作需要POST操作,因爲它們可能有副作用。

+0

你能解釋爲什麼**操作需要POST http動詞**嗎? –

+0

我已經更新了包含該信息的答案 – TomDoesCode