2014-09-24 3 views
0

У меня возникла проблема с созданием соответствующего шаблона routeTemplate для веб-API. Пример запроса будет выглядеть следующим образом:Web API - настраиваемая маршрутизация

POST /mobile?command=doSomething?parameter1=value&parameter2=value HTTP/1.1 
Host: {ENDPOINT} 
Accept: application/json 

Я, вероятно, может использовать

routeTemplate: "{controller}" 

и как-то справиться с этим вручную в контроллере, но это не выглядит как хорошее решение.

Я попытался

routeTemplate: "{controller}?command={action}" 

, но я получил ArgumentException, потому что routeUrl не может содержать знаки вопроса.

Какой у вас правильный маршрут?

+0

Несколько вопросов произошло во время чтения вашего поста. 1. Требуется ли вам использовать старую маршрутизацию стиля, особенно если вы являетесь разработчиком API? 2. Почему вы хотите, чтобы POST-s использовал строку запроса? – Ghukas

+0

У меня нет практического опыта работы с API, за исключением написания одного простого сервиса WCF давно, поэтому я ценю предложения. Я ограничен .NET 4, по старой маршрутизации стиля вы имеете в виду использование параметра команды или не используя маршрутизацию атрибутов? Я получил документацию со многими примерами POST-запросов, как описано выше. Я могу предложить сделать это по-другому, но сначала мне нужно понять, что не так с этим. – Adiqq

ответ

0

Если контроллер обрабатывает различные запросы POST, я бы попробовать установить его так:

"{controller}/{action}/{parameter1}/{parameter2}" // will hit url: mobile/MyActionMethod/2/3 

выше маршрут ударит контроллер с помощью метода:

[HttpPost] 
public async Task<IHttpActionResult> MyActionMethod(HttpRequestMessage request, int parameter1, int parameter2) 

Если вы дон Не хотите, чтобы параметры в URL-адресе либо использовали JObject, чтобы передать их, либо вытащить их из динамической или пропустить модель в качестве паремера.

"{controller}/{action}/"// will hit url: mobile/MyActionMethod 

[HttpPost] 
public async Task<IHttpActionResult> MyActionMethod(HttpRequestMessage request, Jobject data){//JObject requires Json.NET 

dynamic json = data; 
int parameter1 = json.parameter1; 
int parameter2 = json.parameter2; 
} 

или с использованием модели

public class MyMode{ 
public int Parameter1{get;set;} 
public int Parameter2{get;set;} 
} 

[HttpPost] 
public async Task<IHttpActionResult> MyActionMethod(HttpRequestMessage request, MyModel model){ 
    var parameter1 = model.Parameter1; 
    var parameter2 = model.Parameter2; 
} 
Смежные вопросы