如何从ASP.Net Core 2.0中的Post Request接受文件和字符串数据?

时间:2017-11-20 11:07:27

标签: asp.net reactjs asp.net-web-api

我正在编写一个Reactjs应用程序并将一个文件和一个字符串发布到ASP.Net Core 2.0后端api项目中。我想将文件和字符串值发布到后端。但它总是显示错误。

                f.append("File",filesArray[i][0]);
                f.append("member_code", this.state.member_code);
                axios.post(apiBaseUrl
                    , f, {
                    headers: {'Content-Type': 'multipart/form-data'}
                })
                .then((response) => {
                    var result = response.data;
                    if(result[0].status == "1")
                    {
                        this.state.filesNames.push(result[0].filename);
                        if((i +1) == filesArray.length){
                            window.HideModal();
                            this.setState({filesPreview: null, filesToBeSent: null});
                            this.props.onClick(this.state.filesNames);
                        }
                    }
                });

在我的ASP.Net核心项目中,我尝试了如下:

[HttpPost]
        [Route("upload")]
        public async Task<IActionResult> Upload(FileUploadViewModel[] model)
        {
            var file = model.File;
            var member_code = "test";
            if (file.Length > 0)
            {
                string path = Path.Combine(_env.WebRootPath, "uploadFiles/member_files/" + member_code);
                bool exists = System.IO.Directory.Exists(path);

                if (!exists)
                    System.IO.Directory.CreateDirectory(path);

                using (var fs = new FileStream(Path.Combine(path, file.FileName), FileMode.Create))
                {
                    await file.CopyToAsync(fs);
                }
            }

            return clsCommonFunctions.ConstructFileUploadResponse(clsConfig.status_success, file.FileName);
        }

但是在ASP.Net核心功能中,我不能接受我作为multipart / form-data传递的File和string值。

任何人都建议我如何在ASP.Net Core项目中接受文件和字符串值作为FormData。

感谢。

1 个答案:

答案 0 :(得分:1)

article给了我很多帮助。 我刚刚通过使用[FromBody]属性从Request Form-Data中获取特定值来解决我的问题。最终的代码如下:

ALTER Procedure [dbo].[summary_dashboard]
(
 @Period int,
 @DaysinMonth Int,
 @DayHrs Int
)
as
Declare  @Tbl1 as table  (SiteName nvarchar(50) null 
                    , Country nvarchar(50) null 
                    , BudgetPrj nvarchar(50) null 
                    , PeriodEnd DateTime null
                    , DaysMtd Int null 
                    , ToGoMtd Int null 
                    , PeriodToTDays Int null 
                    , MtdRev Numeric(13,2) null
                    , PrjRevenue Numeric(13,2) null 
                    , BdgRev Numeric(13,2) null 
                    , TrgRev Numeric(13,2) null 
                    , BCMMtd Numeric(13,2) null 
                    , HrsMtd Numeric(13,2) null 
                    , FuelVal Numeric(13,2) null 
                    , FuelLtrs Numeric(13,2) null
                    , FuelPerc Numeric(13,2) null 
                    )
Declare @Tbl2 as Table (SiteName nvarchar(50) null
                        , FltCnt Int null
                        , Availability Numeric (5,2) null
                        , Utilization Numeric (5,2) Null
                        , Idle Numeric(5,2)
                        )


insert into @Tbl1 (SiteName 
                    , Country 
                    , BudgetPrj 
                    , PeriodEnd 
                    , DaysMtd  
                    , ToGoMtd  
                    , PeriodToTDays  
                    , MtdRev 
                    , PrjRevenue 
                    , BdgRev  
                    , TrgRev 
                    , BCMMtd  
                    , HrsMtd 
                    , FuelVal 
                    , FuelLtrs 
                    , FuelPerc
                    )
Exec sp_Prd_Dashboard_Summary @Period

insert into @tbl2 (SiteName 
                        , FltCnt 
                , Availability 
                    , Utilization
                    , Idle 
                )
    Exec summary_fleet_performance @DayHrs, @Period, @DaysinMonth


    select tbl1.SiteName 
                    , tbl1.Country 
                    , tbl1.BudgetPrj 
                    , tbl1.PeriodEnd 
                    , tbl1.DaysMtd  
                    , tbl1.ToGoMtd  
                    , tbl1.PeriodToTDays  
                    , tbl1.MtdRev 
                    , tbl1.PrjRevenue 
                    , tbl1.BdgRev  
                    , tbl1.TrgRev 
                    , tbl1.BCMMtd  
                    , tbl1.HrsMtd 
                    , tbl1.FuelVal 
                    , tbl1.FuelLtrs 
                    , tbl1.FuelPerc
                    , tbl2.FltCnt 
                    , tbl2.Availability 
                    , tbl2.Utilization
                    , tbl2.Idle 


from @tbl1 tbl1 full outer join
     @tbl2 tbl2
on tbl1.SiteName = tbl2.SiteName