• 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文件,加个回车,然后保存即可。
  • 相关阅读:
    电话号码和手机号码正则
    IntelliJ Idea 常用快捷键
    springboot常用注解
    idea常用快捷键和插件
    百度地图API的使用方法
    js 经常用到的键盘码
    https://www.cnblogs.com/
    axios传参 后台接收为空
    面相对象之继承
    初始面向对象
  • 原文地址:https://www.cnblogs.com/Rexcnblog/p/9186743.html
Copyright © 2020-2023  润新知