Ho una API Web che utilizza l'autenticazione owin con token al portatore. Avrò sia i client web che wpf (vb), che hanno bisogno di chiedere file di immagine dall'api durante l'autenticazione. Le immagini non devono essere restituite su richieste non autenticate.Restituisce l'immagine dall'azione del controller web api mentre è autenticata
Finora ho una soluzione di lavoro al ritorno un'immagine mentre non autenticata:
La mia azione di controllo in C#:
//[Authorize]
public HttpResponseMessage GetFile()
{
string localFilePath = "C:/Path/ImageOnServerDisk.png";
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "myImage.png";
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
return response;
}
E questo è come io lo mostro sul client web:
Questo funziona correttamente, ma ovviamente quando annullo l'attributo autorizza nell'azione precedente, il file di immagine non viene mostrato e ottengo un messaggio 401 (Non autorizzato) per OTTIENE messaggio che chiama l'azione GetFile. Questo perché non esiste un token di accesso sulla richiesta GET.
Potrei usare jQuery per ottenere tramite ajax, ma non so come impostare il risultato in un elemento img.
Come posso impostare il token di accesso per la richiesta http GET chiamando un'azione in un img src o impostare il contenuto dell'immagine nell'elemento img in jQuery? O c'è un modo migliore per farlo del tutto?
Questo non funziona se si riportare l'** Autorizzo * * attributo. Il mio metodo di azione è sotto un ** ApiController ** e provo a generare i tag che puntano al mio controller, non riesce. Perché non esiste un contesto utente su cui convalidare. Qualche idea? Sto pensando che avrò bisogno di aggiungere AspNet.Mvc e registrare una rotta normale, invece di una rotta HTTP. – Nexus