Télécharger des fichiers avec le service Windows Phone BackgroundTransfer à un site MVC3 d'une manière RESTful
-
26-10-2019 - |
Question
Je besoin de mon application Windows Phone pour être en mesure de télécharger des fichiers audio sur mon site MVC3, en utilisant le BackgroundTransferService disponible dans Mango.
Comme solution possible, je peux:
-
Carte une route vers mon contrôleur:
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "SingleAudioFile", "Api/Audio/Recieve", new { controller = "AudioFiles", action = "Recieve" } ); }
-
Dans le contrôleur, ont une action Recieve
[HttpPost] public JsonResult Recieve(byte[] audio) { // saving and status report logic here }
Recieve
d'action audio
[]: Ma question est ?
Sur le téléphone, les données sont en cours de téléchargement de la manière suivante:
BackgroundTransferRequest btr = new BackgroundTransferRequest (new Uri
(siteUrl + "Api/Audio/Recieve",UriKind.Absolute));
btr.TransferPreferences = TransferPreferences.AllowBattery;
btr.Method = "POST";
btr.UploadLocation = new Uri("/" + Transfers + "/" + isoAudioFileName, UriKind.Relative);
Microsoft.Phone.BackgroundTransfer.BackgroundTransferService.Add(btr);
La solution
Je ne suis pas tout à fait sûr de ce protocole fait l'utilisation BackgroundTransfer pour envoyer le fichier mais s'il écrit le tampon directement au corps du POST demande, vous pouvez utiliser un liant modèle personnalisé pour lire directement à partir du flux de demande:
public class BTModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
using (var ms = new MemoryStream())
{
controllerContext.HttpContext.Request.InputStream.CopyTo(ms);
return ms.GetBuffer();
}
}
}
qui pourrait être enregistré comme ceci:
[HttpPost]
public ActionResult Receive([ModelBinder(typeof(BTModelBinder))] byte[] audio)
{
...
}
Si elle utilise multipart/form-data
alors vous pouvez utiliser un paramètre d'action standard HttpPostedFileBase
comme montré ici .