Télécharger des fichiers avec le service Windows Phone BackgroundTransfer à un site MVC3 d'une manière RESTful

StackOverflow https://stackoverflow.com/questions/8803607

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:

  1. Carte une route vers mon contrôleur:

    public override void RegisterArea(AreaRegistrationContext context)
            {
                context.MapRoute(
                    "SingleAudioFile",
                    "Api/Audio/Recieve",
                    new { controller = "AudioFiles", action = "Recieve" }
                    );
            }
    
  2. Dans le contrôleur, ont une action Recieve

    [HttpPost]    
    public JsonResult Recieve(byte[] audio)
         {
             // saving and status report logic here
         }
    
paramètre Comment puis-je configurer le système pour télécharger des fichiers bind I de Windows Phone à un octet de 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);
Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top