Obtenir le Contenu de la Disposition paramètres
Comment puis-je obtenir du Contenu-Disposition paramètres, je suis retourné à partir de WebAPI contrôleur à l'aide d'WebClient?
WebApi Contrôleur
[Route("api/mycontroller/GetFile/{fileId}")]
public HttpResponseMessage GetFile(int fileId)
{
try
{
var file = GetSomeFile(fileId)
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(new MemoryStream(file));
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = file.FileOriginalName;
/********* Parameter *************/
response.Content.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("MyParameter", "MyValue"));
return response;
}
catch(Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex);
}
}
Client
void DownloadFile()
{
WebClient wc = new WebClient();
wc.DownloadDataCompleted += wc_DownloadDataCompleted;
wc.DownloadDataAsync(new Uri("api/mycontroller/GetFile/18"));
}
void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
WebClient wc=sender as WebClient;
//Try to extract the filename from the Content-Disposition header
if (!String.IsNullOrEmpty(wc.ResponseHeaders["Content-Disposition"]))
{
string fileName = wc.ResponseHeaders["Content-Disposition"].Substring(wc.ResponseHeaders["Content-Disposition"].IndexOf("filename=") + 10).Replace("\"", ""); //FileName ok
/****** How do I get "MyParameter"? **********/
}
var data = e.Result; //File OK
}
Je suis de retour d'un fichier à partir WebApi contrôleur, je suis à la fixation du nom de fichier dans le contenu de la réponse des en-têtes, mais j'aimerais aussi revenir avec un supplément de valeur.
Dans le client que je suis en mesure d'obtenir le nom de fichier, mais comment puis-je obtenir le second paramètre?
OriginalL'auteur Tuco | 2015-05-12
Vous devez vous connecter pour publier un commentaire.
Si vous travaillez avec .NET 4.5 ou plus tard, pensez à utiliser le Système.Net.Le Mime.ContentDisposition classe:
Edit:
sinon, vous devez analyser-tête Content-Disposition selon c'est spécification.
Ici est une simple classe qui effectue l'analyse, à proximité de la spécification:
Alors vous pouvez l'utiliser de cette façon:
La seule chose qui devrait être considéré lors de l'utilisation de cette classe est qu'elle ne permet pas de gérer les paramètres (ou nom de fichier), sans guillemets.
Edit 2:
Il peut maintenant gérer les noms de fichiers sans citations.
Oui je l'ai fait, mais comme je l'ai mentionné, Il peut avoir besoin d'apporter de nouvelles améliorations, mais j'espère que cela résout votre problème.
cette méthode est bonne, mais pour mon exemple, "attachment;filename=download1 - Copie (2).jpg" il n'était pas avec le Système.FormatException (chaîne de caractères Spécifiée n'est pas dans le bon format); de toute façon pour les autres scénarios, il travaillait bien que je suis en train de vivre avec une erreur...
J'ai mis à jour la réponse à cette affaire.
Thnx pour les efforts; je vais vérifier et vous laisser savoir...
OriginalL'auteur Mehrzad Chehraz
Vous pouvez analyser le contenu de la disposition suivant le code de la structure:
Puis il suffit de prendre les pièces hors de la disposition de l'instance.
OriginalL'auteur The Senator
La valeur est là, j'ai juste besoin de l'extraire:
Le Contenu de l'en-tête de Disposition est retourné comme ceci:
Donc j'ai simplement utilisé une chaîne de caractères manipulation pour obtenir les valeurs:
OriginalL'auteur Tuco