Je n'arrive pas à obtenir ma méthode web api 2 pour lire correctement mon message multipart/form-data depuis ng-file-upload sur l'interface utilisateur angulaire côté.Comment puis-je recevoir des données multipart/form dans web api 2 sur OWIN pipeline
J'initié l'appel comme ceci:
Upload.upload({
url: config.ApiUrl + 'Orders/CreateOrder',
data: request
}).then(function (response) {
console.log('Success ' + response.config.data.file.name + 'uploaded. Response: ' + response.data);
}, function (error) {
$scope.errors = "Oops! Something went wrong... " + error.statusText;
});
Et cela me reçoit une charge utile d'envoyer web api:
-----------------------------9623122368016
Content-Disposition: form-data; name="somefield"
Some Value
-----------------------------9623122368016
Content-Disposition: form-data; name="errorMessage"
null
-----------------------------9623122368016
Content-Disposition: form-data; name="success"
false
-----------------------------9623122368016
Content-Disposition: form-data; name="file"; filename="imapdf.pdf"
Content-Type: application/pdf
%PDF-1.2
1 0 obj
<<
/Producer()
/Author()
/Title()
/Subject()
/Keywords()
/CreationDate(D:20040106)
/ModDate(D:20040106)
/Creator()
>>
endobj
2 0 obj
<<
/Type/XObject
/Subtype/Image
/Name/wpt1
/Width 41
/Height 15
/BitsPerComponent 8
/ColorSpace/DeviceRGB
/Length 100
/Filter [/FlateDecode] >>
stream
xsqH0s
Je ne peux pas accéder à HttpContext.Current.Request.Files
parce que je suis à l'aide le pipeline OWIN, et je n'ai pas beaucoup de chance avec Request.Content.ReadAsMultipartAsync
Comment puis-je recevoir mon fichier & associé à des données de formulaire dans le web api 2?
de code C# Mise à jour:
public Task<OrderRequest> CreateOrder(OrderRequest orderRequest)
{
try
{
var asdf = OwinHttpRequestMessageExtensions.GetOwinContext(Request);
if (!Request.Content.IsMimeMultipartContent("multipart/form-data"))
{
var provider = new MultipartMemoryStreamProvider();
this.Request.Content.ReadAsMultipartAsync(provider);
var content = provider.Contents.First();
var buffer = content.ReadAsByteArrayAsync();
}
var test = orderRequest;
var a = HttpContext.Current.Request.Files;
}
catch (Exception ex)
{
throw ex;
}
return Task.FromResult<OrderRequest>(null);
}
Il semble que le code AngularJS crée correctement la requête HTTP. S'il vous plaît montrer le code côté serveur qui a un problème. – georgeawg
@georgeawg posté mes tentatives futiles pour obtenir les données – RandomUs1r
Il semble que vous aurez besoin d'utiliser 'Request.Content.ReadAsMultipartAsync'. Pouvez-vous nous montrer le code que vous avez pour cela? –