[英]Unsupported Media Type http response when upload file using c# api.
我正在使用来自https://github.com/tamtakoe/oi.file 的angular 和 oi.file.js 指令
我的 html 看起来像这样:
<form name="EditOrder" enctype="multipart/form-data">
<input type="file" oi-file="options">
</form>
角度控制器:
$scope.file = {};
$scope.options = {
change: function (file) {
console.log($scope.file);
file.$upload('api/fileupload', $scope.file);
console.log($scope.file);
}
};
和 C# api 控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;
using Ttmc.Core.Database;
using Ttmc.Core.Files;
using Ttmc.WebApp.Common;
namespace Ttmc.WebApp.Controllers
{
public class FileUploadController: ApiController
{
private readonly FileRepository fileRepository;
private readonly LogHelper<FileController> logHelper;
private readonly SqlConnectionFactory sqlConnectionFactory;
public FileUploadController()
{
logHelper = new LogHelper<FileController>();
sqlConnectionFactory = new SqlConnectionFactory();
fileRepository = new FileRepository(new DatabaseFileRepository(sqlConnectionFactory), sqlConnectionFactory);
}
[HttpPost]
public HttpResponseMessage Post(FileController.PostFile postFile)
{
var request = HttpContext.Current.Request;
HttpResponseMessage result = null;
logHelper.LogExecute(() =>
{
if (request.Files.Count == 0)
{
result = Request.CreateResponse(HttpStatusCode.BadRequest);
}
var resultFiles = new List<DatabaseFile>();
using (var connection = sqlConnectionFactory.Create())
using (var transaction = connection.BeginTransaction())
{
for (var i = 0; i < request.Files.Count; i++)
{
var postedFile = request.Files[i];
var id = fileRepository.AddFile(postedFile.InputStream, postedFile.FileName, postFile.OrderId,
postFile.RootFolderName, connection, transaction);
resultFiles.Add(fileRepository.GetInfo(id, connection, transaction));
}
transaction.Commit();
}
result = Request.CreateResponse(HttpStatusCode.Created, resultFiles);
});
return result;
}
public class PostFile
{
public Guid OrderId { get; set; }
public string RootFolderName { get; set; }
}
}
}
当我尝试上传文件时,我收到 Unsupported Media Type 响应。
POST /api/fileupload HTTP/1.1
Host: localhost:12345
Connection: keep-alive
Content-Length: 283
Cache-Control: no-cache
Pragma: no-cache
Origin: http://localhost:12345
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6wBPmLUA5JPOBZYm
Accept: */*
很简单......我不知道发生了什么,但是我的方法在我删除它的参数后开始被调用。
public HttpResponseMessage Post()
所以使用 C# API 控制器上传文件的工作方法是:
[HttpPost]
public HttpResponseMessage Post()
{
var request = HttpContext.Current.Request;
HttpResponseMessage result = null;
logHelper.LogExecute(() =>
{
if (request.Files.Count == 0)
{
result = Request.CreateResponse(HttpStatusCode.BadRequest);
}
var resultFiles = new List<DatabaseFile>();
using (var connection = sqlConnectionFactory.Create())
using (var transaction = connection.BeginTransaction())
{
for (var i = 0; i < request.Files.Count; i++)
{
var postedFile = request.Files[i];
var id = fileRepository.AddFile(postedFile.InputStream, postedFile.FileName, postFile.OrderId,
postFile.RootFolderName, connection, transaction);
resultFiles.Add(fileRepository.GetInfo(id, connection, transaction));
}
transaction.Commit();
}
result = Request.CreateResponse(HttpStatusCode.Created, resultFiles);
});
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.