c# - 如何在 WebAPI 中发布带有附加文件的对象?

标签 c# angularjs asp.net-web-api attachment

我正在使用 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/

相关文章:

c# - Web API - 身份验证建议

javascript - Webapi 导出到 excel 下载的损坏文件

javascript - $scope.param 无法被函数识别

c# - 完成 asp.net web api 2 的 Elmah 日志记录设置

c# - 从字符串中删除单个字符?

c# - 解决共享 transient 实例的位置

c# - 无效超链接 : Malformed URI is embedded as a hyperlink in the document

c# - Damerau - Levenshtein 距离,添加一个阈值

angularjs - 与AngularJS中的$ routeChangeSuccess相反

javascript - Angularjs 和推送器 socket_id