DotNetCore 笔记
最近公司框架升级到DotNetCore了,但是在用post请求的时候,发现页面的post data后台并没有接收到数据,经过调查发现,netcore用法和之前的MVC5不一样,想要接收post里的data,就需要在写接口的入参增加个属性[FromBody]
#region 发布订单 /// <summary> /// 发布订单 /// </summary> /// <param name="_PrivateOrderPostBody">订单</param> /// <returns></returns> [HttpPost("CreateOrder")] public IActionResult CreateOrder([FromBody] PrivateOrderPostBody _PrivateOrderPostBody) { LogService.ILOG(_PrivateOrderPostBody.PK_Farm_User_UserName, "农场用户", "农科院", "AccountController", "CreateOrder", "_PrivateOrderPostBody:" + _PrivateOrderPostBody, "开始"); string ErrorMsg = ""; int Code = 0; Response response = new Response(); var OrderId = OrderService.CreatePrivateOrder(_PrivateOrderPostBody,ref Code, ref ErrorMsg); LogService.ILOG(_PrivateOrderPostBody.PK_Farm_User_UserName, "农场用户", "农科院", "AccountController", "CreateOrder", "_PrivateOrderPostBody:" + _PrivateOrderPostBody + ",Code:" + Code + ",ErrorMsg:" + ErrorMsg, "成功"); response.Code = Code; response.Message = ErrorMsg; response.Data = OrderId; return new JsonResult(response); } #endregion
然后在swagger里看的结果就是
这样就可以正常接收post的参数了。
还是一个新的服务,正常是拷贝一个其他的项目过来,然后修改相应的名字即可。
理论上没问题,但是操作起来总会漏掉
比如这种情况,启动了swagger提示:
但是代码里明明有这个controller。
调查下吧,先想想给代码加个断点,跟一下,
结果就比较尴尬了,没进来。。。
因为这个是第二个执行的StartUp.cs,所以先试下第一个执行的Program.cs,加了断点能执行进去,这就比较尴尬了。
仔细一看,这两个的命名空间不一样
也就说改漏了一个。。。。
把Program那个命名空间也改成Flow就好了。也就是说这里的加载只是按照这个命名空间加载的,并不是那种调用关系。
今天自己犯了个比较二逼的错误。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在service里注入了一个新的Repository,结果导致所有的接口都能启动,但是任何一个都是500,并不进入任何断点,特别神奇了。然后想想就把刚注入的拿掉吧,然后可以了,但是这个不得不引用啊。
结果再看遍代码,发现了,我注入的不是接口,而是实现。。。。。。
主要是这个也不报错,我就不知道怎么查了,也很自信的觉得自己不能写错。。。。
做个记录吧,真傻。
然后项目再次升级,更换数据库,用postgresql,结果是startup里的dbcontext修改了,但是T4生成的那个dbcontext忘了修改了,导致所有的repository全都使用了空的dbcontext,一样的500没有报错信息。还是尴尬。。。这个也要注意的,主要是没有报错信息,真的很烦的。
新起一个项目,然后需要根据数据库生成对应的Model和Repository,做法步骤是
//0.Nuget下載包 //.Net Core 将默认DI改为Autofac //Install-Package Autofac.Configuration //Install-Package Autofac.Extensions.DependencyInjection //DBFirst开发步骤 //Microsoft.EntityFrameworkCore //Microsoft.EntityFrameworkCore.Tools //Microsoft.EntityFrameworkCore.Design //Microsoft.EntityFrameworkCore.SqlServer //Microsoft.EntityFrameworkCore.SqlServer.Design //1.通过数据库将生成Model,调出【程序包管理控制台】,选择项目,输入以下命令 将数据库中所有表生成Model //Scaffold-DbContext “Server=.; Database=AppsDBFarm;Persist Security Info=True;User ID = sa; password=123456;” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models //命令解析: //Scaffold-DbContext “数据库连接字符串” Microsoft.EntityFrameworkCore.SqlServer -OutputDir 输出的文件夹, 如无此参将生成到项目根目录 //如果只想生成某些表将使用Tables参数 如: -Tables(“table1”,”table2”,”table3”,”table4”) //其他参数可输入 Scaffold-DbContext -? 查看帮助. //T4生成,只需要改下tt文件,加个回车,然后保存即可。