这是我的project.json的定义方式,
{ "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.1","type": "platform" },"Microsoft.AspNetCore.Mvc": "1.0.1","Microsoft.AspNetCore.Routing": "1.0.1","Microsoft.AspNetCore.Server.IISIntegration": "1.0.0","Microsoft.AspNetCore.Server.Kestrel": "1.0.1","Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0","Microsoft.Extensions.Configuration.FileExtensions": "1.0.0","Microsoft.Extensions.Configuration.Json": "1.0.0","Microsoft.Extensions.Logging": "1.0.0","Microsoft.Extensions.Logging.Console": "1.0.0","Microsoft.Extensions.Logging.Debug": "1.0.0","Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0","Npgsql": "3.1.9","CoreCompat.Newtonsoft.Json": "9.0.2-beta001","Newtonsoft.Json": "9.0.1" },"tools": { "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final" },"frameworks": { "netcoreapp1.0": { "imports": [ "dotnet5.6","portable-net45+win8" ] } },"buildOptions": { "emitEntryPoint": true,"preserveCompilationContext": true },"runtimeOptions": { "configProperties": { "System.GC.Server": true } },"publishOptions": { "include": [ "wwwroot","**/*.cshtml","appsettings.json","web.config" ] },"scripts": { "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] } }
这是我的Startup的定义方式,
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using QCService.Models; namespace QCService { public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json",optional: true,reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); //Add SurveysRepository for Dependency Injection services.AddSingleton<ISurveysRepository,SurveysRepository>(); //Add FeedbacksRepository for Dependency Injection services.AddSingleton<IFeedbacksRepository,FeedbacksRepository>(); //Add AttachmentsRepository for Dependency Injection services.AddSingleton<IAttachmentsRepository,AttachmentsRepository>(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app,IHostingEnvironment env,ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseMvc(); } } }
最后,我的控制器是如何定义的,
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; //Including model classes for Attachments using QCService.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Hosting; using System.IO; using Microsoft.Net.Http.Headers; // For more information on enabling Web API for empty projects,visit http://go.microsoft.com/fwlink/?LinkID=397860 namespace QCService.Controllers { [Route("api/[controller]")] public class AttachmentsController : Controller { public IAttachmentsRepository AttachmentItems { get; set; } public AttachmentsController(IAttachmentsRepository attachmentItems) { AttachmentItems = attachmentItems; } // GET: api/Attachments [HttpGet] /*http://localhost:52770/api/Attachments*/ public IEnumerable<Attachments> Get() { return AttachmentItems.GetAllAttachments(); } // GET api/Attachments/5 [HttpGet("{id}")] /*http://localhost:52770/api/Attachments/{AttachmentID}*/ public Attachments Get(int id) { return AttachmentItems.GetAttachment(id); } // GET api/Attachments/5 [HttpGet("Feedback/{id}")] /*http://localhost:52770/api/Attachments/Feedback/{FeedbackID}*/ public IEnumerable<Attachments> GetFeedbackAttachments(int id) { return AttachmentItems.GetFeedbackAttachments(id); } // POST api/Attachments [HttpPost]/*http://localhost:52770/api/Attachments/*/ public async Task<IActionResult> PostFiles(ICollection<IFormFile> files) { try { System.Console.WriteLine("You received the call!"); WriteLog("PostFiles call received!",true); //We would always copy the attachments to the folder specified above but for now dump it wherver.... long size = files.Sum(f => f.Length); // full path to file in temp location var filePath = Path.GetTempFileName(); var fileName = Path.GetTempFileName(); foreach (var formFile in files) { if (formFile.Length > 0) { using (var stream = new FileStream(filePath,FileMode.Create)) { await formFile.CopyToAsync(stream); //formFile.CopyToAsync(stream); } } } // process uploaded files // Don't rely on or trust the FileName property without validation. //Displaying File Name for verification purposes for now -Rohit return Ok(new { count = files.Count,fileName,size,filePath }); } catch (Exception exp) { System.Console.WriteLine("Exception generated when uploading file - " + exp.Message); WriteLog("Exception generated when uploading file - " + exp.Message,true); string message = $"file / upload Failed!"; return Json(message); } } /// <summary> /// Writes a log entry to the local file system /// </summary> /// <param name="Message">Message to be written to the log file</param> /// <param name="InsertNewLine">Inserts a new line</param> public void WriteLog(string Message,bool InsertNewLine) { LogActivity ologobject = null; try { string MessageString = (InsertNewLine == true ? Environment.NewLine : "") + Message; if (ologobject == null) ologobject = LogActivity.Getlogobject(); ologobject.WriteLog(Message,InsertNewLine); } catch (Exception ex) { Console.WriteLine("Unable to write to the log file : " + ex.Message); Console.WriteLine("Stack Trace : " + ex.StackTrace); } } } }
我已经通过这个链接,
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads
但只是不能让它工作!
任何帮助表示赞赏!
我使用Google的Advanced Rest Client发布数据如下,
This is how I am sending the POST request
随着以下消息,我不断收到回复…
状态:
500内部服务器错误
加载时间:62毫秒
响应标头
五
请求标头
2
重定向
0
计时
内容类型:multipart / form-data;边界= —- WebKitFormBoundary0RKUhduCjSNZOEMN
内容长度:9106
来源消息
POST / api / Attachments HTTP / 1.1
主持人:localhost:52770
content-type:multipart / form-data;边界= —- WebKitFormBoundary0RKUhduCjSNZOEMN
内容长度:9106
—— WebKitFormBoundary0RKUhduCjSNZOEMN
内容处理:表格数据; NAME = “fileUpload1”;文件名= “1i4ymeoyov_In_the_Wild_Testing.png”
内容类型:image / png
PNG
IHDR,I 3(tEXtSoftwareAdobeImageReadyq e< iTXtXML:com.adobe.xmp 8
^2IDATx ]pU @a H Pe P8 Ȉ b ̌3 p q * 7“ h Yf O atD (< h | DLXdOH =} }ov8_U .....
—— WebKitFormBoundary0RKUhduCjSNZOEMN–