AngularJS ClientからMVC Web APIへの添付ファイル(ファイル)を送信しようとしましたが、動作しません:添付ファイル以外のすべてのフィールドが表示されますヌルとしてここAngularからWeb APIへのデータとファイルの送信
は、モデルの:
class Model{
... //the fields
public HttpPostedFileBase Photo { get; set; }//Attachment file, represented as an image
}
は、ここでのWeb APIです:
public IHttpActionResult CreateModel([FromBody]Model model)
{
...
}
ここAngularJSコードは次のとおりです。
(function() {
angular.module("application")
.controller("homeCtrl", ["$scope", "entityService",
function ($scope, entityService) {
$scope.createModel = function (model)
{
entityService.createModel(model)
.then(function (data) {
console.log(data);
});
};
$scope.model = {
FirstName: "John",
LastName: "Doe"
};
}]);
})();
"use strict";
(function() {
angular.module("application")
.factory("entityService", ["akFileUploaderService", function (akFileUploaderService) {
var createModel = function (model) {
return akFileUploaderService.saveModel(model, "/api/CreateModel");
};
return {
createModel: createModel
};
}]);
})();
(function() {
"use strict"
angular.module("akFileUploader", [])
.factory("akFileUploaderService", ["$q", "$http",
function ($q, $http) {
var saveModel = function (data, url) {
var deferred = $q.defer();
$http({
url: url,
method: "POST",
data: JSON.stringify(data),
transformRequest: angular.identity,
headers: { 'Content-Type': "application/json" }
}).success(function (result) {
deferred.resolve(result);
}).error(function (result, status) {
deferred.reject(status);
});
return deferred.promise;
};
return {
saveModel: saveModel
}
}])
.directive("akFileModel", ["$parse",
function ($parse) {
return {
restrict: "A",
link: function (scope, element, attrs) {
var model = $parse(attrs.akFileModel);
var modelSetter = model.assign;
element.bind("change", function() {
scope.$apply(function() {
modelSetter(scope, element[0].files[0]);
});
});
}
};
}]);
})(window, document);
そしてここでは、HTMLビューです:
WEBAPIは(現時点では)HttpPostedFileBase
とMVCと同じメカニズムを使用していません
....
<div class="form-group">
<label for="attachment">Photo:</label>
<div class="col-md-10">
<input type="file" name="attachment" class="form-control" data-ak-file-model="model.Photo" />
</div>
</div>
<button type="button" ng-disabled="newForm.$invalid" ng-click="createModel(model)" class="btn btn-primary">
Create
</button>
@ J.Doe .. Photoプロパティを渡すモーダルでは? – MukulSharma
サーバー側にCustomMEdiaTypeFormatterが必要です。私の答えはこちら - http://stackoverflow.com/questions/38537484/post-image-to-asp-net-api-2-and-angular-2/38539120#38539120 –
私はそれがサーバー側だとは思わない。クライアント側では、jsonへの変換前のオブジェクトには何らかのデータが含まれていますが、jsonにはファイルがありません。 –