2013-06-19 9 views
5

Mamy projekt MVC, który próbuję zaktualizować, aby włączyć WebApi. Aby uzyskać wymagane trasy, korzystamy z AttributeRouting. Wszystkie wywołania wydają się poprawnie routować, z wyjątkiem [PUT], które zwraca 405. Uprościłem kontroler i akcje i nadal otrzymuję błąd z [PUT], chyba że włączam również [HttpPut]. Nie jestem pewien, czego mi brakuje.405 przy użyciu AttributeRouting.PUTAttribute, chyba że włączam również HttpPutAttribute

[RoutePrefix("api/Sites")] 
    public class SitesController : BaseApiController 
    { 
     [POST("")] 
     public bool CreateSite(SiteSignupArgs args) 
     { 
      ... 
     } 

     [GET("Statuses")] 
     public IList<SiteAuditViewModel> GetStatuses() 
     { 
      ... 
     } 

     [PUT("Statuses/{siteId}")] 
     [HttpPut] // This is required or 405 is returned 
     public HttpResponseMessage UpdateStatus(string siteId, UpdateStatusArgs args) 
     { 
      ... 
     } 

     [DELETE("Statuses/{siteId}")] 
     public HttpResponseMessage Delete(string siteId) 
     { 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
} 

Wersja 3.5.6 z AttributeRouting.Core, AttributeRouting.Core.Http, AttributeRouting.Core.Web, AttributeRouting.WebApi

MVC4

WebDAV nie jest zainstalowany.

Odpowiedz

6

To, co widzisz, jest oczekiwanym zachowaniem. Selektor działań w interfejsie API WWW domyślnie przyjmuje akcję o czasownik POST, jeśli nazwa działania nie ma przedrostka z takimi czasownikami jak "Get", "Post", "Put", "Delete" itp.

Teraz nie działa, nawet jeśli określony atrybut [PUT("Statuses/{siteId}")] wyraźnie, ponieważ selektor Action szuka atrybutów z System.Web.Http nazw jak HttpGetAttribute, HttpPostAttribute, HttpPutAttribute itp

od AttributeRouting za PUTAttribute nie ma powyższych typów, selektor działanie nie rozważ to i nadal uważa, że ​​jest to domyślny, czyli POST. Twoje obejście atrybutu HttpPut jest poprawne.

+0

Dobra odpowiedź,.,. –

+0

@kiran Chciałbym znaleźć to o wiele wcześniej, spędziłem tyle godzin próbując to zrozumieć. Dzięki za potwierdzenie. Dla google: Metoda ASP.net 405 jest niedozwolona – dwbartz

Powiązane problemy