Git Product home page Git Product logo

newlifex / newlife.cube Goto Github PK

View Code? Open in Web Editor NEW
582.0 29.0 151.0 88.77 MB

Web快速开发平台,搭建管理后台,灵活可扩展!内部集成了用户权限管理、模板继承、SSO登录、OAuth服务端、数据导出与分享等多个功能模块,在真实项目中经历过单表100亿数据添删改查的考验。

Home Page: https://newlifex.com/cube

License: MIT License

C# 6.87% CSS 24.88% JavaScript 61.89% HTML 6.36% Shell 0.01% Dockerfile 0.01%
net-mvc newlife cube admin asp-net-core csharp

newlife.cube's Introduction

魔方 NewLife.Cube

GitHub top language GitHub License Nuget Downloads Nuget Nuget (with prereleases)

魔方是一个快速Web开发平台,能够快速搭建系统原型,而又具有足够灵活的可扩展性!
内部集成了用户权限管理、模板继承、SSO登录、OAuth服务端、数据导出与分享等多个功能模块,默认模板在真实项目中经历过单表100亿数据添删改查的考验。

快速体验:

docker run newlifex/cube

演示站点:https://cube.newlifex.com CentOS7 + CDN
SSO中心:https://sso.newlifex.com OAuth服务端

魔方教程:https://newlifex.com/cube
XCode教程:https://newlifex.com/xcode
核心库教程:https://newlifex.com/core


第三代魔方

计划启动第三代魔方的设计,主要方向是借助前后端分离技术重构现代化用户界面,在3月份完成第一个最小可用版(vue)。
后端接口源码已合并到魔方代码库的master分支,各前端代码库独立,欢迎大家积极参与!

Vue版:https://vue.newlifex.com
Antd版:https://antd.newlifex.com
Swagger:https://cube3.newlifex.com/swagger/index.html

项目参与须知

  1. 参与者加入github上的NewLifeX团队,自由向魔方dev分支提交代码或修改文档。
  2. 用于前后端分离的WebApi版魔方后台是 NewLife.Cube,原 NewLife.CubeNC 保留MVC继续维护。
  3. 欢迎增加更多的前端项目,每一种前端新建独立代码库,如Antd则新建 NewLife.CubeAntd
  4. 大家在文档或代码处,标注负责人。
  5. 源码库使用github,以及新生命团队糖果库(可申请权限)
  6. 项目待办任务管理 https://github.com/orgs/NewLifeX/projects/1

目标蓝图

第三代魔方的远景目标,预计用2~3年时间完成。

  1. 重构为现代化用户界面,保留魔方默认视图以及视图定制的**,让下游项目在迁移到第三代魔方时,尽可能少修改代码
  2. 前后端分离技术,支持Vue/React/Angular/Blazor等主流前端框架
  3. 魔方理念和用法保持不变,新建WebApi项目后从Nuget引入NewLife.Cube,加入模型生成实体类和Controller即可得到默认皮肤的界面,需要定制时才写前端代码
  4. 增强移动端支持,混合式手机APP、小程序
  5. 增强支持数据大屏

春雨计划

春雨计划,定于2023年3月完成第一个最小vue可用版,待办项如下(欢迎补充):

  1. [*] 在dev分支新建WebApi项目 NewLife.Cube,占用Asp.Net 4.5的坑位(已弃用),将来发布包也是 NewLife.Cube
  2. [*] 专属于NetCore版的代码,转移到 NewLife.CubeNC 目录,尽量保留代码提交历史,方便将来查找
  3. [*] 设计全新的 EntityControllerEntityReadonlyController,只为前端提供接口
  4. [*] 编写接口文档
  5. [*] 设计vue版主页(框架页),前端项目是 NewLife.CubeVue,vue项目调用后端 CubeDemo
  6. [*] 设计vue版登录页
  7. [] 设计vue版用户列表页和表单页
  8. [] 设计vue版角色列表页和表单页

Vue版前端代码库:
https://github.com/NewLifeX/NewLife.CubeVue http://git.newlifex.com/NewLife/NewLife.CubeVue

非主线任务

支持vue之外的前端框架,不限于3月份完成。

  1. [*] 新增Blazor,项目 NewLife.CubeBlazor。 @张善友 @张炳彬
  2. [*] 新建AntDesign,项目 NewLife.CubeAntd。 @Van

Antd版前端代码库:
https://github.com/NewLifeX/NewLife.CubeAntd http://git.newlifex.com/NewLife/NewLife.CubeAntd

Blazor版前端代码库:
https://github.com/NewLifeX/NewLife.CubeBlazor http://git.newlifex.com/NewLife/NewLife.CubeBlazor

WebApi接口说明

  1. 接口地址 https://cube3.newlifex.com/swagger/index.html
  2. 登录地址 /Admin/User/Login , 测试账号 admin/admintest/test
  3. JWT令牌传递方式:请求头 Authentication(推荐)、Cookie、Url参数token
  4. 首页框架获取菜单 /Admin/Index/GetMenuTree
  5. 每个控制器,都有一个 /{Area}/{Controller}/GetFields 接口,获取可用于展示的字段信息,如 https://cube3.newlifex.com/Cube/App/GetFields?kind=1,kind参数可选List/Detail/AddForm/EditForm
  6. 控制器主路由对应列表页数据获取接口,调用各控制器的Search查找数据,由于查询参数多变,接口入参没有固定模型,而是直接从请求字符串中获取参数。如 https://cube3.newlifex.com/Cube/Area?parentid=0&pageSize=7
  7. 列表页接口,返回数据中pager为分页信息
  8. 列表页接口,返回数据中state为统计行,如用户统计 https://cube3.newlifex.com/Admin/UserStat
  9. 详情接口 /{Area}/{Controller}/Detail,参数id固定为主键查询,如 https://cube3.newlifex.com/Cube/Area?id=450921
  10. 新增接口 /{Area}/{Controller}/Insert,Post需要新增的实体对象
  11. 修改接口 /{Area}/{Controller}/Update,Post需要修改的实体对象,务必带有主键
  12. 删除接口 /{Area}/{Controller}/Delete,Get删除参数id指定的数据

魔方特性

  • 通用权限管理,用户、角色、菜单、权限,支持控制器Action权限控制
  • 多数据库,支持 MySql / SQLite / Sql Server / Oracle / SqlCe / Access
  • 免部署,系统自动创建数据库表结构,以及初始化数据,无需人工干涉
  • 强大的视图引擎,支持子项目视图重写父项目相同位置视图,任意覆盖修改默认界面

ASP.NET Core 安装

  • Visual Studio 中新建ASP.NET Core Web项目
  • 通过 NuGet 引用NewLife.Cube.Core,或自己编译最新的魔方 NewLife.CubeNC源码
  • appsettings.jsonConnectionStrings段设置名为Membership的连接字符串,用户角色权限菜单等存储在该数据库
  • 系统自动识别数据库类型,默认Data Source=..\Data\Membership.db
  • 编译项目,项目上点击鼠标右键,查看在浏览器中查看,运行魔方平台
  • 系统为MySql/SQLite/Oracle/SqlCe数据库自动下载匹配(x86/x64)的数据库驱动文件,驱动下载地址可在Config\Core.config中修改PluginServer
  • 系统自动下载脚本样式表等资源文件,下载地址可在Config/Cube.config中修改PluginServer
  • 默认登录用户名是admin,密码是admin,也可以使用NewLife等第三方OAuth登录,首个进入系统的用户抢得管理员,原admin禁用
  • 项目发布时只需要拷贝*.dllappsettings.json*.deps.json*.runtimeconfig.json,以及其它自己添加的资源文件

ASP.NET MVC 安装

  • Visual Studio 中新建ASP.NET MVC项目
  • 通过 NuGet 引用NewLife.Cube,或自己编译最新的魔方 NewLife.Cube源码
  • Web.config<connectionStrings>段设置名为Membership的连接字符串,用户角色权限菜单等存储在该数据库
  • 系统自动识别数据库类型,默认\<add name="Membership" connectionString="Data Source=..\Data\Membership.db" providerName="Sqlite"/>
  • 编译项目,项目上点击鼠标右键,查看在浏览器中查看,运行魔方平台
  • 系统为MySql/SQLite/Oracle/SqlCe数据库自动下载匹配(x86/x64)的数据库驱动文件,驱动下载地址可在Config\Core.config中修改PluginServer
  • 系统自动下载脚本样式表等资源文件,下载地址可在Config/Cube.config中修改PluginServer
  • 默认登录用户名是admin,密码是admin,也可以使用NewLife等第三方OAuth登录,首个进入系统的用户抢得管理员,原admin禁用
  • 推荐安装 Visual Studio 插件 Razor Generator,给.cshtml文件设置自定义工具RazorGenerator,可以把.cshtml编译生成到DLL里面
  • 项目发布时只需要拷贝Binweb.configGlobal.asax,以及其它自己添加的资源文件

新生命项目矩阵

各项目默认支持net7.0/netstandard2.1/netstandard2.0/net4.61,旧版(2022.1225)支持net4.5/net4.0/net2.0

项目 年份 说明
基础组件 支撑其它中间件以及产品项目
NewLife.Core 2002 核心库,日志、配置、缓存、网络、序列化、APM性能追踪
NewLife.XCode 2005 大数据中间件,单表百亿级,MySql/SQLite/SqlServer/Oracle/TDengine/达梦,自动分表
NewLife.Net 2005 网络库,单机千万级吞吐率(2266万tps),单机百万级连接(400万Tcp)
NewLife.Remoting 2011 RPC通信框架,内网高吞吐或物联网硬件设备场景
NewLife.Cube 2010 魔方快速开发平台,集成了用户权限、SSO登录、OAuth服务端等,单表100亿级项目验证
NewLife.Agent 2008 服务管理组件,把应用安装成为操作系统守护进程,Windows服务、Linux的Systemd
NewLife.Zero 2020 Zero零代脚手架,基于NewLife组件生态的项目模板,Web、WebApi、Service
中间件 对接知名中间件平台
NewLife.Redis 2017 Redis客户端,微秒级延迟,百万级吞吐,丰富的消息队列,百亿级数据量项目验证
NewLife.RocketMQ 2018 RocketMQ纯托管客户端,支持Apache RocketMQ和阿里云消息队列,十亿级项目验
NewLife.MQTT 2019 物联网消息协议,MqttClient/MqttServer,客户端支持阿里云物联网
NewLife.IoT 2022 IoT标准库,定义物联网领域的各种通信协议标准规范
NewLife.Modbus 2022 ModbusTcp/ModbusRTU/ModbusASCII,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Siemens 2022 西门子PLC协议,基于IoT标准库实现,支持IoT平台和IoTEdge
NewLife.Map 2022 地图组件库,封装百度地图、高德地图和腾讯地图
NewLife.IP 2022 IP地址库,IP地址转物理地址
产品平台 产品平台级,编译部署即用,个性化自定义
AntJob 2019 蚂蚁调度,分布式大数据计算平台(实时/离线),蚂蚁搬家分片**,万亿级数据量项目验证
Stardust 2018 星尘,分布式服务平台,节点管理、APM监控中心、配置中心、注册中心、发布中心
NewLife.ERP 2021 企业ERP,产品管理、客户管理、销售管理、供应商管理
CrazyCoder 2006 码神工具,众多开发者工具,网络、串口、加解密、正则表达式、Modbus
XProxy 2005 产品级反向代理,NAT代理、Http代理
HttpMeter 2022 Http压力测试工具
GitCandy 2015 Git源代码管理系统
SmartOS 2014 嵌入式操作系统,完全独立自主,支持ARM Cortex-M芯片架构
SmartA2 2019 嵌入式工业计算机,物联网边缘网关,高性能.NET6主机,应用于工业、农业、交通、医疗
菲凡物联FIoT 2020 物联网整体解决方案,建筑、环保、农业,软硬件及大数据分析一体化,单机十万级点位项目验证
NewLife.UWB 2020 厘米级(10~20cm)高精度室内定位,软硬件一体化,与其它系统联动,大型展厅项目验证

新生命开发团队

XCode

新生命团队(NewLife)成立于2002年,是新时代物联网行业解决方案提供者,致力于提供软硬件应用方案咨询、系统架构规划与开发服务。
团队主导的开源NewLife系列组件已被广泛应用于各行业,Nuget累计下载量高达60余万次。
团队开发的大数据核心组件NewLife.XCode、蚂蚁调度计算平台AntJob、星尘分布式平台Stardust、缓存队列组件NewLife.Redis以及物联网平台NewLife.IoT,均成功应用于电力、高校、互联网、电信、交通、物流、工控、医疗、文博等行业,为客户提供了大量先进、可靠、安全、高质量、易扩展的产品和系统集成服务。

我们将不断通过服务的持续改进,成为客户长期信赖的合作伙伴,通过不断的创新和发展,成为国内优秀的IT服务供应商。

新生命团队始于2002年,部分开源项目具有20年以上漫长历史,源码库保留有2010年以来所有修改记录
网站:https://newlifex.com
开源:https://github.com/newlifex
QQ群:1600800/1600838
微信公众号:
智能大石头

newlife.cube's People

Contributors

abbetwang avatar arlenxiao avatar cdyong avatar codekgithub avatar darkmice avatar djswcn avatar e4ky avatar flyeagle32 avatar gadgj avatar gzhcyk avatar hbh8945 avatar hogenwang avatar m446883859 avatar nnhy avatar nygula avatar qcjxberin avatar rebider avatar skyisland avatar t18724723333 avatar xi3892 avatar xueshaoyu avatar xusp avatar xxred avatar yanbin688 avatar yannking avatar yunfeiyang1916 avatar yynnb avatar z8125230 avatar zshankang avatar zwllh123 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

newlife.cube's Issues

单点登录回调地址生成不正确

image
没有跳转到https,解决:

  1. 根据魔方设置,生成https协议的回调地址
  2. 强制http跳转https
  3. 如果使用了Nginx,可添加http重定向https

NewLife.Cube模板修改不生效

问题描述: 项目环境为最新版Xcode,NewLife.Cube,NewLife.Core,运行CubeDemo,修改NewLife.Cube的login.cshtml,单独运行NewLife.Cube页面修改生效,通过项目引用NewLife.Cube的CubeDemo不生效,断点可进,但仍会加载旧的cshtml。

数据权限

设计:区域以行政区划代码如37,3713,3723,371312,371322,根据区域划分数据权限,在用户表用扩展字段Ext4录入区域代码,通过该字段来取业务表中的相应区域的数据。
问题:1.没有地方能够添加 数据权限的值,自带的userId是在ControllerBaseX中添加的, HttpContext.Items["userId"] = user.ID; 自己定义的区域代码变量不知道在哪加。
2.数据权限能否设置成 StartWith,这样上级可以看下级,同级只能看自己, like '37%'能看3713、3723、371312、371322;而like '3713%'只能看3713、371312、371322这样

NullReferenceException

在教务系统demo那个里面,点击添加学生报错了。错误信息如下:

System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 System.Object.GetType()
   在 NewLife.Cube.HtmlExtensions.ForEnum(HtmlHelper Html, String name, Object value, String label) 位置 D:\X\NewLife.Cube\NewLife.Cube\Common\HtmlExtensions.cs:行号 431
   在 NewLife.Cube.HtmlExtensions.ForEditor(HtmlHelper Html, String name, Object value, Type type, String format, Object htmlAttributes) 位置 D:\X\NewLife.Cube\NewLife.Cube\Common\HtmlExtensions.cs:行号 53
   在 NewLife.Cube.HtmlExtensions.ForEditor(HtmlHelper Html, FieldItem field, IEntity entity) 位置 D:\X\NewLife.Cube\NewLife.Cube\Common\HtmlExtensions.cs:行号 107
   在 ASP._Views_Shared__Form_Item_cshtml.Execute() 位置 D:\X\NewLife.Cube\NewLife.Cube\Views\Shared\_Form_Item.cshtml:行号 33
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   在 System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   在 System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   在 ASP._Views_Shared__Form_Group_cshtml.Execute() 位置 D:\X\NewLife.Cube\NewLife.Cube\Views\Shared\_Form_Group.cshtml:行号 14
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   在 System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   在 System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   在 ASP._Views_Shared__Form_Body_cshtml.Execute() 位置 D:\X\NewLife.Cube\NewLife.Cube\Views\Shared\_Form_Body.cshtml:行号 12
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   在 System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   在 System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   在 ASP._Views_Shared_Form_cshtml.Execute() 位置 D:\X\NewLife.Cube\NewLife.Cube\Views\Shared\Form.cshtml:行号 21
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   在 System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   在 System.Web.WebPages.StartPage.ExecutePageHierarchy()
   在 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   在 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
   在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
   在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_1.<BeginInvokeAction>b__5(IAsyncResult asyncResult)

关于魔方源码下载后报错的问题

之前在群里就有很多人再问这个问题,我当时用的老版本,以为是小问题就没有在意。结果我在更新到新的版本的时候也出现了这个问题,而且还找不到解决的办法。。。
下面是报错信息

未能加载文件或程序集“XCode, Version=9.11.7044.42317, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件
源文件: D:\NewLife.Cube\NewLife.Cube\PreApplicationStartCode.cs 行: 34
`

if (set.SslMode >= SslModes.Full)
HttpApplication.RegisterModule(typeof(CubeModule));
}
}

`
程序集加载跟踪: 下列信息有助于确定程序集“XCode, Version=9.11.7044.42317, Culture=neutral, PublicKeyToken=null”未能加载的原因。

修复获取当前操作系统版本不正确

https://github.com/NewLifeX/NewLife.Cube/blob/master/NewLife.Cube/Areas/Admin/Views/Index/Main.cshtml#L86 第86行换为判断.Net Framework 大于4.7.1即可更换为 @System.Runtime.InteropServices.RuntimeInformation.OSDescription 方法获取当前操作系统版本,并同时兼容.NET Framework与.NET Core 双平台 示例如下:

if (att.FrameworkName.IndexOf("Core") > 0) { //System.Runtime.InteropServices.RuntimeInformation.OSDescription; } else if (att.FrameworkName.IndexOf("v4.7.1") > 0) { //System.Runtime.InteropServices.RuntimeInformation.OSDescription; } else if (att.FrameworkName.IndexOf("v4.7.2") > 0) { //System.Runtime.InteropServices.RuntimeInformation.OSDescription; } else if (att.FrameworkName.IndexOf("v4.8") > 0) { //System.Runtime.InteropServices.RuntimeInformation.OSDescription; } else { // 此时已经非.NET Core和Fx了,总不会有人去用Xamarin.Android/IOS/MAC去搭建Web平台 //Environment.OSVersion; }

后话
System.Runtime.InteropServices.RuntimeInformation.OSDescription 方法适用于
.NET Core
3.0 2.2 2.1 2.0 1.1 1.0
.NET Framework
4.8 4.7.2 4.7.1
.NET Standard
2.1 2.0 1.6 1.4 1.3 1.2 1.1
Xamarin.Android
7.1
Xamarin.iOS
10.8
Xamarin.Mac
3.0

id到前端后数据精度损失

因ID字段是int64类型,通过json格式传到前端后会出现精度损失,希望能增加参数,以字符串类型序列化 int64 数据

魔方具体应用的一些问题

1.魔方中有没有办法进行横切编程,例如我要给所有的控制器的动作方法加上统一的数据权限,或者讲解一下在魔方中实现多租户的思路。
2.请补充讲解一下集成第3方登录以及SSO在魔方中的应用,例如部署自己的SSO服务器。
3.控制器在魔方中想自动注册为不可见,应该如何配置?

登陆错误

yj_16q2sh w wgxb r u

在登陆时候遇到这个错误,数据库已经生成了数据库,是否数据库生成的表少了?
ohkv7re1 d5vxg90x7_mbo

而且想自己生成user表时,发现
y44 wt dr3g0 7r _ swe 0
user的实体竟然是被编译过的,求指导

生成的列表和表单页面在.net7+VS2022下报错

Severity Code Description Project File Line Suppression State
Error CS0246 The type or namespace name 'FieldCollection' could not be found (are you missing a using directive or an assembly reference?) DotNet.NewLife.Cube C:\Users\Will\source\repos\DotNet.NewLife.Cube\Areas\Cube\Views\PrincipalAgent_Form_Body.cshtml 8 Active

要增加一个:@using NewLife.Cube;

oJhaYsc1FT

魔方记住密码功能失效

魔方记住密码功能失效,导致重新打开后会再次提醒登录。
示例令牌 eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJTdG9uZSIsImV4cCI6MTcxMTgwMzU4MCwiaWF0IjoxNjgwMjY3NTgwfQ.SFLvvHFK-VWlJzHupott60Cgg1YGNplwDFvbeVGGWHY

魔方在记住密码登录时,后端会把令牌写入cookie,有效期1年。
经查,再次提醒登录时,cookie的确是1年有效期。
有可能时候cookie的有效期不足(默认7200秒)。
需要深入分析

字典参数修改报错

在字典参数模块,添加一个条数据后,再对该数据进行修改,就会报错误。
数据内容为:类别( AdminType)、名称(部门用户)、数值(3)、种类(整数),基他默认。
报错内容:
[NullReferenceException: 未将对象引用设置到对象的实例。]
XCode.EntityTree2.FindAllParents(IEntityTree entity, Boolean includeSelf) +64 XCode.EntityTree2.<get_AllParents>b__21_0(String e) +38
XCode.EntityExtend.Get(String key, Func2 func) +429 XCode.EntityTree2.get_AllParents() +115
XCode.EntityTree`2.get_Deepth() +45

[TargetInvocationException: 对象“XCode.Membership.Parameter”上的属性访问器“Deepth”发生以下异常:'未将对象引用设置到对象的实例。']
System.ComponentModel.ReflectPropertyDescriptor.GetValue(Object component) +378
System.Web.Mvc.<>c__DisplayClass7_0.b__0() +18
System.Web.Mvc.ModelMetadata.get_Model() +17
System.Web.Mvc.DataAnnotationsModelValidator.Validate(Object container) +127
System.Web.Mvc.d__2.MoveNext() +216
System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) +121
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +68
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +1210
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +333
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +335
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +105
System.Web.Mvc.Async.<>c__DisplayClass3_1.b__0(AsyncCallback asyncCallback, Object asyncState) +640
System.Web.Mvc.Async.WrappedAsyncResult1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +14 System.Web.Mvc.Async.WrappedAsyncResultBase1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +346
System.Web.Mvc.<>c.b__152_0(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState) +27
System.Web.Mvc.Async.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30 System.Web.Mvc.Async.WrappedAsyncResultBase1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +494
System.Web.Mvc.<>c.b__151_1(AsyncCallback asyncCallback, Object callbackState, Controller controller) +16
System.Web.Mvc.Async.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +20 System.Web.Mvc.Async.WrappedAsyncResultBase1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +403
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +16
System.Web.Mvc.<>c.b__20_0(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) +54
System.Web.Mvc.Async.WrappedAsyncVoid1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30 System.Web.Mvc.Async.WrappedAsyncResultBase1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +427
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +48
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +159

调整对接SSO后的默认角色

魔方Cube对接sso后,根据“魔方设置”->“默认角色”修改为0或者-1,实现强制使用源端角色。
方便了开发与集成。

一年多以来,逐渐发现,有些场合需要混合使用sso和本地登录,然后“默认角色”被修改为-1,导致本地注册用户无法取得角色。

因此,拟调整魔方,恢复“默认角色”为以前的3(普通用户),对接SSO则强制使用源端角色,不再需要配置。

新引用NewLife.Cube,启动异常

由于在群里没人回答,只好来这里了
admin现在刚刚引入cube的时候是被锁的,所以我用qq登陆
然后是普通游客权限,所有页面都打不开。。‘
暴力解决方法是下SQLite Expert 一个修改sqllite文件的东西,把相应的登陆着改为管理员。话说你们是故意挖的坑吗

管理系统中文件上传报错

1.报错操作

image

2.报错截图

image

3.具体报错信息如下

[Exception: 找不到目录!] NewLife.Cube.Admin.Controllers.FileController.Upload(String r, HttpPostedFileBase file) in D:\X\NewLife.Cube\NewLife.Cube\Areas\Admin\Controllers\FileController.cs:263 lambda_method(Closure , ControllerBase , Object[] ) +147 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) +157
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +27 System.Web.Mvc.Async.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22 System.Web.Mvc.Async.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 System.Web.Mvc.Async.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0() +58 System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +228 System.Web.Mvc.Async.<>c__DisplayClass7_0.<BeginInvokeActionMethodWithFilters>b__1(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResult1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 System.Web.Mvc.Async.<>c__DisplayClass3_6.<BeginInvokeAction>b__4() +35 System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult) +100 System.Web.Mvc.Async.WrappedAsyncResult1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 System.Web.Mvc.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) +11 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +45 System.Web.Mvc.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller) +13 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +22
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) +28 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase1.End() +49 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +577 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +132 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +163

4. .net版本信息jie截图

image

.NetCore版本中关于注入使用的讨论

魔方的 .Net Core版本已经迁移过来,但是仍然保留大量以前的用法,这跟Core推崇的依赖注入用法格格不入。现在使用的对象容器源于XCode,2011年开始使用,已经很老了。萌新同学提出了此问题,确实是个需要正视的问题。现在面临的问题就是:继续使用对象容器,还是全面改成Core那样的写法。

讨论范围不仅限于魔方Cube,同时涉及到XCode。在这里讨论此问题,大家有好的想法或者解决方案可以在此提出,大家共同讨论。

字典参数 修改报错

在xcode源码里
XCode\Tree\EntityTree.cs
将FindAllParents方法的第一行加个try catch就不报错了
try
{
if (entity == null || IsNull((TKey)entity[Setting.Parent]) || entity.Parent == null) return new List();
}
catch (Exception)
{
return new List();
}

1111版本编译时缺少Build.cs

在拉取最新的1111版本后,编译项目时报错,分别缺少Build.cs 和Build_netcore.cs文件。
————
错误 CS2001 未能找到源文件“E:\Git Repository\Newlife\NewLife.Cube\NewLife.Cube\Entity\Build.cs”。 NewLife.Cube E:\Git Repository\Newlife\NewLife.Cube\NewLife.Cube\CSC 1 活动
错误 CS2001 未能找到源文件“E:\Git Repository\Newlife\NewLife.Cube\NewLife.Cube\Entity\Build_netcore.cs”。 NewLife.Cube E:\Git Repository\Newlife\NewLife.Cube\NewLife.Cube\CSC 1 活动

PagerHelper的GetFormAction方法有错误

第49行 var forms = new HashSet(req.Form.AllKeys, StringComparer.OrdinalIgnoreCase);
第53行 foreach (var item in query.AllKeys)

这两个AllKeys在nfx里都是正常的,但是在netcore里报错,因为req.Form和query都不是NameValueCollection类型

datetime in mssql is not support new DateTime(1, 1, 2),

a bug from method
public UserOnline SetStatus(String sessionid, String page, String status, UserAgentParser userAgent, Int32 userid = 0, String name = null, String ip = null)
in this file UserService.cs
code like:
LastError = new DateTime(1, 1, 2),

菜单乱码

image
尚未设置本地化

//依然失败
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)

静态资源问题

主要问题:静态资源自动从插件服务器下载,解压到wwwroot资源文件夹,开发的时候解压路径是在bin目录,但是静态资源路径默认的设置是在项目源码的wwwroot,所以会导致bin目录有静态资源,项目源码目录wwwroot却没有。

解决:
1、开发的时候,在bin目录复制一份资源到项目wwwroot目录
2、设置静态资源目录与dll文件目录一致

模板覆盖部分生效问题

魔方视图 覆盖失败 webconfig已经添加程序集 视图也导出了 覆盖无效
在根目录/views覆盖生效
在Areas/area/views覆盖无效
RazorGenerator 已经安装并生成Generator.cs文件

Registration prompt exception

System.Data.SQLite.SQLiteException (0x80004005): constraint failed
UNIQUE constraint failed: User.Name
在 System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
在 System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
在 System.Data.SQLite.SQLiteDataReader.NextResult()
在 System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
在 System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
在 System.Data.SQLite.SQLiteCommand.ExecuteScalar(CommandBehavior behavior)
在 XCode.DataAccessLayer.DbSession.ExecuteScalar[T](DbCommand cmd) 位置 E:\X\Src\XCode\DataAccessLayer\Common\DbSession.cs:行号 472

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.