繁体   English   中英

在ASP.NET MVC,Web API和Entity Framework中上载文件以及其他参数

[英]Uploading a file along with other parameters in ASP.NET MVC, Web API and Entity Framework

我想上传和保存文件以及其他具有int,string和datetime数据类型的用户输入数据。 我想将文件保存到硬盘驱动器,并将路径和其他输入数据保存在SQL Server数据库表中。 每当我试图一起做时,我就会收到AggregateException 我是ASP.NET MVC和Web API的新手。

下面是我在ASP.NET MVC项目中的操作方法。

public ActionResult AddOrEdit(mvcCandidate cn)
{
    if (cn.ID == 0)
    {
        if (cn.cvFile.ContentLength != 0)
        {
            string filename = Path.GetFileNameWithoutExtension(cn.cvFile.FileName);
            string extension = Path.GetExtension(cn.cvFile.FileName);
            filename = filename + DateTime.Now.ToString("yymmssff") + extension;
            cn.path = "~/Uploads/" + filename;
            filename = Path.Combine(Server.MapPath("~/Uploads/"), filename);
            cn.cvFile.SaveAs(filename);
        }
        else
            cn.path = "";
        try
        {
            HttpResponseMessage response = GlobalVariables.WebApiClient.PostAsJsonAsync("Candidates", cn).Result;
        }
        catch (AggregateException ex)
        {
            var ch = ex.Message;
            return null;
        }         
    }
}

这是WebAPI项目中的操作方法

public IHttpActionResult PostCandidate(Candidate candidate)
{
    db.Candidates.Add(candidate);
    db.SaveChanges();
    return CreatedAtRoute("DefaultApi", new { id = candidate.ID }, candidate);
}

模型类如下:

public class mvcCandidate
{
    public int ID { get; set; }
    [Display(Name="Name")]
    public string Name { get; set; }
    [Display(Name = "Address")]
    public string Adress { get; set; }    
    [Display(Name = "Date Of Birth")]
    [DataType(DataType.Date)]
    public Nullable<System.DateTime> DOB { get; set; }
    public string PIN { get; set; }
    public Nullable<int> CompanyID { get; set; }
    [Display(Name = "CV")]
    public string path { get; set; }
    public HttpPostedFileBase cvFile { get; set; }           
    public virtual mvcCompany Company { get; set; }
}

在处理Web API时,我非常努力地用数据保存文件,因此我设法通过从当前HttpContext中获取属性和文件来解决此问题,我知道使用绑定要容易得多,但是这种方式对我有用,因此用于保存文件的控制器(API控制器代码)为:

    [HttpPost]
    public IHttpActionResult SaveFileWithData()
    {
        try
        {
            var httpRequest = HttpContext.Current.Request;
            #region Get entity data
            var entity = new EntityClass();
            entity.Name = httpRequest.Params["name"];

            //here you put the saving code into entity framework aka Context.Entity.Add(entity); Context.SaveChanges();

            #endregion

            if (httpRequest.Files.Count > 0)
            {
                var myFile = httpRequest.Files[0];

                var filePath = HttpContext.Current.Server.MapPath($"~/Files/{ myFile.FileName}");
                //Set the file into server
                myFile.SaveAs(filePath);
            }
            return Ok();
        }
        catch (Exception ex)
        {
            return InternalServerError();
        }
    }

当从客户端提交数据时,我使用了Multipart表单,如下所示:

使用RESTFull客户端测试API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM