2013-03-12 2 views
0

СХЕМА Я хочу ресурс доступа, как это:mvc4 веб-апи маршрут

 /api/adddevice/12345 

что неправильно в этом маршруте?

routes.MapRoute(
      name: "AddDevice", 
      url: "adddevice/{id}", 
      defaults: new { controller = "some controller", action = "adddevice", id = UrlParameter.Optional } 
    ); 


    public string AddDevice(int id) 
    { 
     return "Device " + id.ToString() + " succesfully added"; 
    } 

EDIT

Вот сведения об ошибке:

 <MessageDetail> 
     No type was found that matches the controller named 'some controller'. 
    </MessageDetail> 

ответ

3

Вы говорите, что вы хотите URL, чтобы быть этим:

/api/adddevice/12345 

но ваше отображение маршрута есть это:

url: "adddevice/{id}", 

Посмотрите, как это не соответствует? Вначале отображение не имеет api/. URL-адрес, указанный в вызове MapRoute(), должен соответствовать всем URL (за исключением хост-части, конечно). Удалите /api/ из URL-адреса, который вы вводите, или добавьте его в URL-адрес, который вы набираете.

Кстати, routes.MapRoute() предназначен для MVC; для WebApi вы хотите config.Routes.MapHttpRoute().

+0

удаленный api решить проблему, но добавил не) – NET

+0

Я ожидаю, что mvc framework по умолчанию добавил [api], чтобы отделить api contrllers от обычного - его неожиданно для меня, что метод действия недоступен, когда я добавляю [api] для запроса url в этом sheme: url: "adddevice/{id}" – NET

+0

Я не уверен, почему это сюрприз; URL-адреса просто не совпадают. У них даже нет одинакового количества элементов. Вы печатаете то, что начинается с «api», и что сопоставление маршрутов ищет что-то, что начинается с «adddevice». Достаточно просто. "api"! = "adddevice". – anaximander

1

Вы пропустили вне 'API' в маршруте, и вы по всей видимости, с помощью маршрутизации MVC.

Примечание это должно быть добавлено к WebApiConfig и не в RouteConfig:

config.Routes.MapHttpRoute(
       name: "AddDevice", 
       routeTemplate: "api/adddevice/{id}", 
       defaults: new { controller = "somecontroller", action = "adddevice", id = UrlParameter.Optional } 
       ); 
+0

это не работает для меня. .... здесь я не использую [api]: routes.MapRoute ( имя: «По умолчанию», url: «{controller}/{action}/{id}", defaults: new {controller = "PDF ", action =" GetServiceInfo ", id = UrlParameter.Optional} ); и он работает – NET

+0

Я отредактировал свой ответ. –

Смежные вопросы