2015-10-16 63 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) 
{ 
    ...