2015-10-16 1 views
0

Я пытаюсь реализовать Web Api контроллер ASP.NET, который поддерживает стандарт JsonApi (http://jsonapi.org/ в основном используемый ember.js)тир в URL (отображается на действия)

URL-адрес может содержать тир. Но соответствующее имя метода в коде C# может не содержать тире.

Мои Javascript пытаются POST к

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

Вы пробовали указать маршрут по атрибуту на своих действиях? '[Маршрут (" jsonapi/activity-exercise ")]' – Shelby115

+1

Или '' '[ActionName (" activity-exercise ")]' ''? – 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) 
{ 
    ...