Vorrei esporre un'azione ASP.Net Web Api 2 utilizzando il verbo HTTP PUT per caricare i file. Questo è coerente con il nostro modello REST in quanto l'API rappresenta un file system remoto (simile a WebDAV, ma davvero semplificato), quindi il client sceglie i nomi delle risorse (quindi PUT è l'ideale e POST non è una scelta logica).Carica il file utilizzando il verbo PUT in ASP.Net Web Api 2
La documentazione Web Api descrive how to upload files using multipart/form-data forms, ma non descrive come farlo utilizzando i metodi PUT.
Che cosa utilizzeresti per testare tale API (i moduli HTML multipart non consentono i verbi PUT)? Sarebbe l'implementazione del server apparire come l'attuazione multipart descritto the web api documentation (utilizzando il MultipartStreamProvider
), o dovrebbe assomigliare a questo:
[HttpPut]
public async Task<HttpResponseMessage> PutFile(string resourcePath)
{
Stream fileContent = await this.Request.Content.ReadAsStreamAsync();
bool isNew = await this._storageManager.UploadFile(resourcePath, fileContent);
if (isNew)
{
return this.Request.CreateResponse(HttpStatusCode.Created);
}
else
{
return this.Request.CreateResponse(HttpStatusCode.OK);
}
}
Sarebbe interessante vedere come scrivere un corretto test di unità per questo, piuttosto che affidarsi all'esecuzione di un server HTTP. – James
Ho avuto un sacco di problemi nel far funzionare tutto questo mentre continuavo a ricevere 404 errori. Risulta che potrebbe essere necessario cambiare il web.config per accettare i nomi dei file del modulo '{nomefile}. {Estensione}'. Vedi questa domanda StackOverflow per i dettagli: http://stackoverflow.com/questions/20998816/dot-character-in-mvc-web-api-2-for-request-such-as-api-people-staff-45287 –