2015-10-16 40 views
0

我嘗試實施支持(主要由Ember.js http://jsonapi.org/)的JsonApi標準短跑的URL(映射到該動作)

一個ASP.NET網頁API控制器的URL可能包含一個破折號。但是C#代碼中相應的方法名稱可能不包含破折號。

我的JavaScript嘗試發佈到

http://localhost:50000/jsonapi/activity-exercises 

但我不能夠實現,可以收到該請求的端點。 我曾嘗試:

[HttpPost] 
public HttpResponseMessage ActivityExercises([FromBody] ActivityExerciseEntry value) 
{ 
    // ... 

理想的情況下應該有一個屬性添加到方法指定的URL映射動作名稱。這種屬性是否存在?

我的路由映射是這樣的:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapHttpRoute("EmberJsonApi", "jsonapi/{action}/{id}", new { controller = "JsonApi", id = RouteParameter.Optional }); 
    routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional }); 
} 
+1

您是否試過在動作中指定通過屬性的路徑? '[Route(「jsonapi/activity-exercises」)]' – Shelby115

+1

或'''[ActionName(「activity-exercises」)]'''? – Rob

+1

我建議你切換到「基於約定」路由的「屬性」路由,因爲你的URI很好......非傳統(至少就.NET而言)http://www.asp.net/web- api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#ENABLE –

回答

1

我想通了。我花了很多谷歌上搜索的,因爲這不是很好的記錄....

正如我懷疑,有存在的屬性,我可以用:[ActionName]

所以endpoind定義只是外表看起來像這樣:

[HttpPost] 
[ActionName("activity-exercises")] 
public HttpResponseMessage ActivityExercises([FromBody] ActivityExerciseEntry value) 
{ 
    ...