【发布时间】:2017-01-17 00:56:48
【问题描述】:
尝试将一些数据和附件(文件)从 AngularJS 客户端发送到 MVC Web API,但它不起作用:我可以看到除附件之外的所有字段,显示为 null
这是模型:
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 视图:
....
<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 属性的模式中?
-
您需要在服务器端使用 CustomMEdiaTypeFormatter。在这里查看我的答案 - stackoverflow.com/questions/38537484/… 。
-
我认为这与服务器端无关。客户端显示json没有任何文件,虽然转换为json之前的对象包含一些数据
-
@MukuiSharma:照片是模型的属性
标签: angularjs asp.net-mvc asp.net-web-api single-page-application