我正在使用 AngularJS 构建我的应用程序。在其中,我有一个用户可以填写信息的表格。这会创建一个使用 WebAPI 发送到数据库的对象。
这是 Angular 代码:
$scope.test_object =
{
'Title': $scope.test_object.title,
'Description': $scope.test_object.description,
};
// POST to the database
$http.post(some_url, JSON.stringify($scope.test_object)).then(function (response) {
// do something
}
);
这是我在 Visual Studio 中的类(class):
public class ClassName
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
这可以正常工作,没有任何问题。我的问题是表单具有附加文件的功能。我在 Visual Studio 中有一个 Controller 来发送文件,代码如下:
public class FileUploadController : ApiController
{
[Route("api/upload")]
public async Task<HttpResponseMessage> Post()
{
try
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
//Save To this server location
var uploadPath = HttpContext.Current.Server.MapPath("~/Data");
//Save file via CustomUploadMultipartFormProvider
var multipartFormDataStreamProvider = new CustomUploadMultipartFormProvider(uploadPath);
// Read the MIME multipart asynchronously
await Request.Content.ReadAsMultipartAsync(multipartFormDataStreamProvider);
// Show all the key-value pairs.
foreach (var key in multipartFormDataStreamProvider.FormData.AllKeys)
{
foreach (var val in multipartFormDataStreamProvider.FormData.GetValues(key))
{
Console.WriteLine(string.Format("{0}: {1}", key, val));
}
}
//In Case you want to get the files name
//string localFileName = multipartFormDataStreamProvider
// .FileData.Select(multiPartData => multiPartData.LocalFileName).FirstOrDefault();
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (Exception e)
{
return new HttpResponseMessage(HttpStatusCode.NotImplemented)
{
Content = new StringContent(e.Message)
};
}
}
}
我在网上找到了这段代码,它适用于发送文件。这会将任何文件发送到指定的文件夹 (/Data)。
现在我的问题是:如何在对象和附件之间建立关系?我如何知道哪些文件与每个对象相关联?我是否以某种方式将对象 ID 与文件一起发送?
感谢您的帮助。
最佳答案
在这些情况下,您可以做的是将保存文件的地址保存在对象的属性中。因此,例如,您可以像这样向您的类添加一个属性:
public class ClassName
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string FilePath { get; set; }
}
然后当您将文件写入目录时,您将文件的地址复制到 FilePath 属性。
关于c# - 如何在 WebAPI 中发布带有附加文件的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39719659/