2013-06-19 6 views
5

Abbiamo un progetto MVC che sto tentando di aggiornare per includere WebApi. Per ottenere i percorsi richiesti utilizziamo AttributeRouting. Tutte le chiamate sembrano essere indirizzate correttamente eccetto per [PUT] che restituisce un 405. Ho semplificato il controller e le azioni e continuo a ricevere l'errore con [PUT] a meno che includo anche [HttpPut]. Non sono sicuro di ciò che mi manca.405 quando si utilizza AttributeRouting.PUTAttribute a meno che includa anche 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); 
     } 
} 

versione 3.5.6 di AttributeRouting.Core, AttributeRouting.Core.Http, AttributeRouting.Core.Web, AttributeRouting.WebApi

MVC4

WebDAV non è installato.

risposta

6

Quello che stai vedendo è un comportamento previsto. Il selettore di azioni in Web API presuppone che l'azione sia del verbo POST se il nome dell'azione non ha un prefisso con verbi come "Get", "Post", "Put", "Delete" ecc.

Ora esso non funziona, anche se è stato specificato [PUT("Statuses/{siteId}")] attributo in modo esplicito perché, selettore di azione cerca attributi da System.Web.Http namespace come HttpGetAttribute, HttpPostAttribute, HttpPutAttribute ecc

dal PUTAttribute di AttributeRouting non è dei tipi di cui sopra, selettore di azione non lo fa consideralo e pensa ancora che sia quello predefinito, ovvero POST. Quindi la soluzione alternativa per avere l'attributo HttpPut è corretta.

+0

buona risposta,.,. –

+0

@kiran Vorrei averlo trovato molto prima, ho passato così tante ore a cercare di capirlo. Grazie per averlo confermato. Per google: asp.net 405 metodo non consentito – dwbartz