2013-03-07 2 views
1

Я могу получить только штраф через/api/set/id или/api/set/archived /, но PUT не работает. Мои маршруты:Запрашиваемый ресурс не поддерживает http mehod «Put»

 routes.MapHttpRoute(
      name: "SetId", 
      routeTemplate: "api/set/{id}", 
      defaults: new { controller = "Set", action = "getset" } 
     ); 

     routes.MapHttpRoute(
      name: "Set", 
      routeTemplate: "api/set/{action}/{id}", 
      defaults: new { controller = "Set", id = RouteParameter.Optional } 
     ); 

Комплект контроллера:

 [HttpPut] 
     [AcceptVerbs("PUT")] 
     [ActionName("update")] 
     public HttpResponseMessage PutSet(Set set) 
     { 
     ... 
     } 

В стельку я помещаю необработанный объект из запроса соответствующего GET для:

http://localhost:24144/api/set/update 

Но я получаю

"{" $ id ":" 1 "," Сообщение ":" Запрошенный ресурс не поддерживает htt p метод 'PUT'. "}"

Почему не работает PUT?

EDIT: Я также попробовал обновить этот первый маршрут, чтобы иметь id как необязательный, и удалил имя действия в методе PUT. Затем я попытался получить доступ через PUT/api/set, и я получаю ту же ошибку 405 - PUT не поддерживается.

ответ

1

Возможно, глаголы не зарегистрированы правильно в web.config?

<authorization> 
     <!-- General application authorization --> 
     <allow verbs="GET" users="*"/> 
     <allow verbs="PUT" users="*"/> 
     <allow verbs="POST" users="*"/> 
    </authorization> 
+0

Просто попытался это (они не были указаны первоначально) - казалось, не работают. Спасибо за подсказку, хотя – SB2055

1

Переместить этот маршрут в верхней части файла конфигурации маршрута:

routes.MapHttpRoute(
      name: "Set", 
      routeTemplate: "api/set/{action}/{id}", 
      defaults: new { controller = "Set", id = RouteParameter.Optional } 
     ); 

и переименовывать метод Put для обновления

[HttpPut]

public HttpResponseMessage Update(Set set) 
    { 
    ... 
    }