私はAngularjsとc#Web APIを使って自分のモバイルアプリケーションを開発しています。私はこのプラットフォームを初めて使っています。私のアプリケーションでは、クライアント(Angularjs)からサーバー(c#)にファイルとデータをアップロードする必要があります。データをポストする際、FormDataはクライアント側から正常にポストされましたが、サーバー側で空のデータとして受信されました。私は先月からそれを把握しようとしていますが、まだ解決策を得ることはできません。私を助けてください。これは私のコードです:
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
await Request.Content.ReadAsMultipartAsync(provider);
var Token = provider.FormData.GetValues("Token")[0];
var Product = provider.FormData.GetValues("Product")[0];
var Reference = provider.FormData.GetValues("Reference")[0];
var ModuleId = Convert.ToInt32(provider.FormData.GetValues("ModuleId")[0]);
var Repeat = "";
if (provider.FormData.GetValues("Repeat") == null)
{
Repeat = "N";
// var Repeat = provider.FormData.GetValues("Repeat")[0];
}
else
{
Repeat = "Y";
}
var Description = provider.FormData.GetValues("Description")[0];
var Attachment1 = provider.FileData[0];
if (!CRQExtentions.IsValidToken(Token))
// return new HttpResponseMessage(HttpStatusCode.Unauthorized);
return Request.CreateResponse(HttpStatusCode.Unauthorized, "Invalid Token");
var tr = new TicketRepository();
var res = tr.AddTicket(Token, Product, Reference, ModuleId, Repeat, Description, Attachment1, Attachment2);
string s = "Success";
System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
return Request.CreateResponse(HttpStatusCode.OK, new { data = "Test msg" });
}
catch (Exception e)
{
string f = "Failed";
System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
return Request.CreateResponse(HttpStatusCode.BadRequest, new { data = "Test msg" });
}
HTML:
<form enctype="multipart/form-data" ng-submit="uploadDataWithFile()">
<input type="file" file-model="myFile" name="Attachment1" multiple />
<input type="button" ng-click="uploadDataWithFile()" value="Send" name="button" /></form>
がANGULARJS:
myApp.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.headers.post['Accept'] = 'application/json, text/javascript';
$httpProvider.defaults.headers.post['Content-Type'] = 'multipart/form-data; charset=utf-8';}]);
myApp.service('fileUpload', function ($http) {
this.uploadFileToUrl = function (file, uploadUrl) {
var fd = new FormData();
fd.append('Attachment1', file);
//console.log(fd);
$http.post(uploadUrl, fd, {
//withCredentials: false,
headers: {
'Content-Type': undefined
},
transformRequest: angular.identity,
responseType: "arraybuffer"
}).success(function (response, status, headers, config) {
console.log(response);
if (status == 200 || status == 202) {
//do whatever in success
}
else {
// handle error in else if needed
}
}).error(function (error, status, headers, config) {
console.log(error);
ons.notification.alert("Error in Saving New CRQ");
// handle else calls
});
}
});
myApp.controller('NewCRQController', ['$scope', '$http', 'fileUpload', function ($scope, $http, fileUpload) {
$scope.uploadDataWithFile = function() {
var file = $scope.myFile;
console.dir(file);
var checkedItem;
if ($scope.switchon == true) {
checkedItem = "Y";
}
else {
checkedItem = "N";
}
var uploadUrl = "http://localhost:11663/api/Tickets/CreateNewCrqWithFiles";
fileUpload.uploadFileToUrl(file, uploadUrl);
}
}]);
フォームデータを適切に構築していると仮定し、一度に** **ファイル**だけを送信していると仮定して、$ httpでcontentType:falseとprocessData:falseを設定します。役職。また、Web APIのアクションで、メソッドを** public YourReturnTypeCreateNewCrqWithFiles(HttpPostedFileBase Attachment1)** – Developer
@Developerありがとうございます。私はあなたが言ったことを試みたが、私はmultipart/form-dataを提出するためにフォームを提出する必要があるようだ。フォームの送信を使用すると、サーバーから応答メッセージを受け取ることができなくなります。だから私はブロブを使用するような他の方法を試しています。 –
いいえ、それは必要ありません。私はあなたにサンプルを与えましょう。 – Developer