HttpPostedFileBase不接受文件

时间:2015-11-05 20:02:43

标签: c# asp.net-mvc api rest

我有一个需要接受文件的API方法。我正在使用Postman chrome插件来调用api并附加一个文件。

我在创建一个初始的MVC网站后,为我的MVC项目添加了API功能。我不知道我是否错过了一些配置,但我的其他API调用只是没有得到任何文件。

这是代码

[Route("~/api/mediaitems/{token}/{eventId}")]
    public async Task<HttpResponseMessage> MediaItems(string token, int eventId, HttpPostedFileBase upload)
    {
        if (upload.ContentLength > 0)
        {
            string _targetFolder = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FilePath"]);
            string _targetPath = Path.Combine(_targetFolder, Guid.NewGuid() + Path.GetFileName(upload.FileName));
            upload.SaveAs(_targetPath);

            var mediaItem = new MediaItem
            {
                MediaFilePath = _targetPath,
                FileType = upload.FileName,
                EventId = eventId,
                CreatedDate = DateTime.Now.Date
            };

            //Save mediaItem
            _repo.SaveMediaItem(mediaItem);

            return Request.CreateResponse(HttpStatusCode.Created);
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }           
    }

http://localhost:24727/api/mediaitems/12341254234/1

这是网址,然后我将.jpg附加到邮递员正文。 当我运行api请求时,它永远不会有文件因此它永远无法保存。

3 个答案:

答案 0 :(得分:0)

你可以从这样的事情开始:

[Route("~/api/mediaitems/{token}/{eventId}")]
public async Task<HttpResponseMessage> MediaItems(string token, int eventId)
{
    byte[] data = await this.Request.Content.ReadAsByteArrayAsync();

    //data will contain the file content, you can save it here

    return Request.CreateResponse(HttpStatusCode.Created);
}

请注意我是如何删除HttpPostedFileBase upload参数的。

如果需要,您可以根据this.Request.Content进行一些验证。例如,您可能想要检查内容长度。

答案 1 :(得分:0)

那是ApiController吗? Web API中没有HttpPostedFile

您必须使用其他方法:How to post file to ASP.NET Web Api 2

答案 2 :(得分:0)

也许有帮助...将以下内容添加到web.config中。您必须以字节为单位设置文件的最大可接受大小:15728640 = 15MB

<configuration>    
    <location path="Custommer/edit">
    <system.web>
      <httpRuntime maxRequestLength="15728640"/>
    </system.web>
  </location>
</configuration>