首页
学习
活动
专区
圈层
工具
发布

ASP.NET Core: 全新的ASP.NET !

另外,它使得 ASP.NET 应用更加精简和模块化(可以根据你的应用需要向里面添加其他模块),跨平台(你可以很容易的在 Windows, Mac or Linux 上开发和部署你的应用),云优化(你可以在云上在云上部署和调试你的应用...跨平台的运行时 你可以在 OSX 和 Linux上运行 ASP.NET Core 应用,这对于 ASP.NET 来说,这具有跨时代的意义,也给 ASP.NET 开发者和设计师们带来了全新的体验。...上 14年前,ASP.NET 平台基本只能部署在一种服务器上,那就是 IIS。...另外,ASP.NET Core 也会包含一个叫做 Kestrel 的 Web 服务器,它建立在 libuv 上,主要用于 iOS 和 Linux 操作系统。...以上 ASP.NET Core 1.0 的新特性和新概念的介绍,是为了更好的帮助我们使用 ASP.NET Core 进行开发,同时在开发过程中,我们还可以借助一些好的工具来提高开发效率,并减少代码量,如

13.8K101
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    还在到处写 != null ?Java 代码异味该改改了

    我写 Java 代码已经十多年了,有一个教训是我付出了很大代价才学到的: ❗️ 到处写 != null 根本不是什么策略 —— 这只是一种防御性的拼凑做法,往往会掩盖设计和沟通中更深层次的问题。...= null 的真正问题 让我们来聊聊为什么这是一种不好的实践: 1. 它掩盖了糟糕的设计 如果你的对象在任何时候都可能为 null,问问自己:它们为什么会是 null ? 是数据缺失了?...你知道这意味着什么吗? 运行时会抛出 NullPointerException。 更糟的是,这可能会在生产环境中特定条件下发生,而日志往往不会告诉你原因。...使用注解:@NonNull、@Nullable 使用 @NonNull、@Nullable 等注解,并配置 Lombok、SpotBugs 或 IntelliJ 等工具,在编译时发出警告。...• 避免在公共 API 中暴露 null 给团队的更明智的 null 策略 与其盲目地写 !

    25810

    揭开.NET 中 asyncawait 的神秘面纱:隐藏代价与优化之道

    然而,在这种优秀的语法背后,隐藏着一套复杂的机制,一旦被误用,可能会对应用程序的性能产生重大影响。 本文将揭示其中隐藏的代价,并探讨每一位经验丰富的开发人员都应该了解的优化策略。...当你将一个方法标记为 async 时,.NET 会进行一些有趣的操作。它会获取你的代码,并将其转换为一种特殊的结构,称为 “状态机”。...Task.FromResult(); } 在第一个版本中,我们创建了一个实际上并不需要的状态机。...我们可以进行优化… 让你的代码运行得更快:ValueTask 现在,让我们谈谈 ValueTask。可以把它看作是在特定情况下比 Task 更高效的版本。...当你的方法经常无需等待就能立即返回时 当你处理大量小型、快速的操作时 当你构建高性能系统时 不要仅仅因为 ValueTask 听起来更好就使用它。如果使用不当,它实际上会对性能产生更糟糕的影响!

    49410

    asp.net core 认证及简单集群

    众所周知,在Asp.net WebAPI中,认证是通过AuthenticationFilter过滤器实现的,我们通常的做法是自定义AuthenticationFilter,实现认证逻辑,认证通过,继续管道处理...Demo中,我的要求也是这个,只要是经过基本认证的用户即可,那为什么Demo中没有使用呢?因为这里是个坑!...因为,如果按注释中的方法配置,我需要在每个希望认证的控制器或方法上都用Authorize标记,甚至还需要在特性上配置角色或策略,而这里我的预设是全局认证,所以,直接以全局过滤器的形式添加到了MVC处理管道中...我也觉得没关系啊,这是net core认证的第二个坑,那就是,在.net core或者微软看来,认证仅仅提供Principal的生成、序列化、反序列化及重新生成Principal,它的职责确实也包括了返回...,并特别感谢Savorboard大神的特别指正。

    1.6K10

    .NET 开发者最容易踩坑的6个asyncawait 使用错误

    今天我就来总结一下,**.NET 开发者最容易犯的 6 个 async/await 使用错误**,并告诉你正确的做法是什么。希望你看了之后能少走弯路,写出真正高效又稳定的异步代码。...async void 方法就像“幽灵”一样,你无法等待它完成,也无法捕获它的异常。 一旦抛出异常,就会直接崩溃整个应用程序 —— 即使你在外面写了 try-catch 也没用!...✅ 正确做法: 如果你的方法就是同步返回数据,那就不要用 async,直接返回已完成的 Task: public Task GetNumberAsync() { return Task.FromResult...小贴士: ★HttpClient 是设计用来长期使用的,频繁 new 它是一种“反模式”。建议配合 IHttpClientFactory 或服务注入一起使用。...✅ 正确做法: 在非 UI 代码中,建议加上 .ConfigureAwait(false) 来避免上下文捕获: // 避免上下文捕获,提高性能并防止死锁 public async Task DoWorkAsync

    39810

    从全栈工程师视角看技术面试:实战经验与代码解析

    ### 第三轮:数据库与ORM问题 **面试官:** 你在项目中使用过MyBatis吗?能说说你是如何编写SQL映射文件的吗? **应聘者:** 是的,我经常使用MyBatis来操作数据库。...**面试官:** 这是个很好的实践,说明你对数据库优化有一定的经验。 ### 第四轮:微服务与云原生问题 **面试官:** 你之前参与过微服务架构的设计,能说说你是如何实现服务发现的吗?...### 第五轮:安全与权限控制问题 **面试官:** 你在项目中使用过Spring Security吗?能说说你是如何实现权限控制的吗?...### 第六轮:消息队列与缓存问题 **面试官:** 你在项目中使用过Kafka吗?能说说你是如何设计消息队列的吗?...**应聘者:** 我会使用Prometheus和Grafana来监控系统的运行状态,比如CPU使用率、内存占用和请求延迟等。 **面试官:** 这个做法非常科学,说明你对系统监控有全面的认识。

    14710

    我是这样从零开始用深度学习做狗脸识别 iOS App 的

    在 iPhone 上实时视频的顶部运行 使用 ARKit 显示 3D 过滤器(二维的表示不是那么酷) 从对深度学习一无所知到做出一个还不错的 app(https://itunes.apple.com/...我想要分享我在每一步中所学到的经验。 我希望那些刚接触深度学习的人会觉得这些方法很有用。 步骤 1:深度学习大都是现成的,有点奇怪 我需要回答的第一个问题是“这是可能的吗?”。我的问题容易处理吗?...步骤 3:确保模型在 iOS 上运行 现在有了一个简单的工作模型,我的下一步是确保它能在一个手机上运行,并且运行得足够快。...在 iOS 上运行.mlmodel 可以通过教程代(http://suo.im/4NmTUj)码完成。如此简单的过程让我被它征服了。...使用pip安装的版本在box外无法运行,我必须使用 python2.5 在 conda 环境中从源代码构建它,打补丁。嘿,至少它有用。

    1.6K20

    我曾用 Angular 重写了 jQuery 应用,如今却被 React 逼疯了

    后来,人们开始抱怨这种全向数据流不好,所以有人推动使用单向(自上而下)绑定,这在技术上听起来更好,但实际上让一切变得更复杂,并引发了一场讨论,最终,如今的我们不得不使用 Redux。...它们甚至不是规则,而只是一种仪式,因为没有什么能真的阻止你从任何地方修改状态。人们真的认为,如果你给某样东西起一个聪明的名字,比如 reducer,它突然就变成了好的架构吗?...但在实践中,你能像这样干净利落地分开吗? 首先,我最不满意的是 useEffect 被用来“在组件挂载后运行某物”。...我理解,当 React 从类迁移到钩子时,这是最接近 componentDidMount 的替代品,但是拜托,这无论如何都是一种很不规范的做法。 使用一个“副作用”钩子来初始化组件?...我认为,代码之所以糟糕,是因为开发一个交互式 UI,其中任何组件都可以更新任何其他组件,这简直是在软件开发中能做的最复杂的事情之一了。 想想你在日常生活中使用的任何其他系统。

    24700

    《C#并发编程经典实例》笔记

    它首先检查操作是否已经完成,如果完成了,就继续运行 (同步方式)。否则,它会暂停 async 方法,并返回,留下一个未完成的 task。一段时间后, 操作完成,async 方法就恢复运行。...await代码中抛出异常后,异常会沿着Task方向前进到引用处 你一旦在代码中使用了异步,最好一直使用。调用 异步方法时,应该(在调用结束时)用 await 等待它返回的 task 对象。...解决办法是可以使用 Task.FromResult 方法创建并返回一个新的 Task 对象,这个 Task 对象是已经 完成的,并有指定的值 使用 IProgress 和 Progress 类型。...其中一种做法是使用 Task.Wait,并在有错误时拆开 AggregateException 对象。...NET 中使用 Task.Run,这是因为在 ASP.NET 中,处理请求的代码本来就是在线程池线程中运行的,强行把它放到另一个线程池线程通常会适得其反 (7) 实用技巧 程序的多个部分共享了一个资源,

    2K71

    WordPress开发人员犯的12个最严重的错误

    是一种非常流行的站点快速搭建与运行的方式。...2.使用那些在变量、函数、常量或类中太常见的名称 在开发插件时,最好使用一种命名约定来防止代码冲突,以防有其他插件使用相同的名称。...ver=1' />),并根据仪表板中更新的自定义设置生成CSS代码。 这在WordPress性能方面真的是一个糟糕的做法。...当然,该文件可以在浏览器中运行(虽然我确定打印时,甚至不会缩进或漂亮),但是如果您有本地的项目副本并浏览主题的代码,并且需要找到一个CSS或JavaScript语法(在使用script.php的情况下)...在PHP方法中使用HTML代码通常是一种不好的做法(当然对于小的HTML代码也有例外),特别是对于一个由多个开发人员维护的插件来说。

    3.9K10

    深入探讨 C# 和 .NET 中 asyncawait 的历史、背后的设计决策和实现细节

    最后,我们需要一种方法来传播可能在任务中发生的任何异常(如果这是一个通用的MyTask,则返回它的_result);为了促进某些情况,我们还允许此方法阻塞等待任务完成,我们可以使用ContinueWith...这是模式的另一部分,必须在异步方法的返回位置上使用的类型上公开,用于在状态机上执行初始MoveNext。...如果数据存储在线程静态字段中,异步方法将能够访问它,但是仅在它在调用线程上同步运行的点之前;如果它将一个continuation连接到某个它启动的操作,而该continuation最终在某个其他线程上运行...即使它碰巧在同一个线程上运行,或者因为调度程序强制它这样做,到它运行时,数据可能已被该线程启动的某些其他操作删除和/或覆盖。...这就是你能够在UI应用程序的某个事件处理程序中等待并使代码在等待完成后继续在正确的线程上运行的原因。

    1.4K42

    .NET 源代码自动生成

    中介者模式 中介模式是在应用程序中解耦模块的一种方式。在基于web的应用程序中,它通常用于将前端与业务逻辑的解耦。 在.NET平台上,MediatR库是该模式最流行的实现之一。...有了CQRS,我们会从这样做: 改为这样做: CQRS通常与event sourcing相关联,但是使用CQRS并不需要使用event sourcing,而仅仅使用CQRS本身就会给我们带来很多架构上的优势...在一个非常高的层次上,你可以看到它如下: 首先,编译器编译你的C#源代码并生成语法树。 然后,源代码生成器可以检查这个语法树并生成新的C#源代码。...然后,这个新的源代码被编译并添加到最终的输出中。 重要的是要知道源代码生成器永远不能修改现有的代码,它只能向应用程序添加新代码。...2、SourceGenerator-MediatR-CQRS 这是一个使用源代码生成器的示例应用程序。查看项目文件,以了解该项目如何引用源生成器。

    67910

    找到并杀掉 Linux 系统中的僵尸进程的命令方法

    重点要说的是,僵尸进程并没有像它的名称那样看起来可怕。 但如果系统的内存已经所剩不多或者有太多的僵尸进程在吃掉内存,问题会变得糟糕。...这是真实可能发生的,它有一定的概率,特别当存在一个编码糟糕的程序开始大量产生僵尸进程的时候。 在这种情况下,找到并杀死僵尸进程是一个明智的做法。...如何找到僵尸进程 Linux 系统中的进程可能处于如下状态中的一种: D = 不可中断的休眠 I = 空闲 R = 运行中 S = 休眠 T = 被调度信号终止 t = 被调试器终止 Z = 僵尸状态...一个简单的方法是在终端中使用 top 命令。...如何找到并杀死一个僵尸进程?僵尸进程能被杀死吗? 僵尸进程已经死了,要如何才能杀死一个已经死亡的进程呢? 在僵尸电影中,你可以射击僵尸的头部或烧掉它们,但在这里是行不通的。

    19.3K40

    ASP.NET Core依赖注入深入讨论

    如果我们打算共享一个实例,这是一种方法: var dataService = new DataService(); services.AddSingleton(dataService...如果可能的话,我会尽量避免使用RequestServices,并且只在中间件必须能够在缺少某些组件一样可以运行的情况下才使用它。...您也可以通过在特定的Action上添加参数,并使用FromServicesAttribute特性对其进行装饰来注入所需的服务,这会指示MVC Core从服务集合中获取它,而不是尝试对其进行模型绑定。...TypeFilterAttribute会先找出过滤器的依赖项并通过DI获取它们,然后创建过滤器。...{ mvc.Filters.Add(typeof(TestActionFilter)); }); } 这样就不需要将过滤器添加到服务集合,它的工作方式就好像您已经在每个控制器上添加了

    2.6K10

    从全栈工程师到技术大牛:一场真实面试中的深度技术探讨

    最近在一个电商项目中,我主导了后端API的开发,并使用Vue3实现了前端页面。 **面试官**:听起来你对前后端都有一定的理解。那你能说说你在电商项目中具体做了什么吗?...**面试官**:那你有没有遇到缓存击穿的情况?是如何解决的? **李明**:确实遇到过,我们采用的是互斥锁的方式,当缓存失效时,只允许一个线程去查询数据库并更新缓存,其他线程等待结果。...**面试官**:这个思路是对的,不过你有没有尝试过使用布隆过滤器来防止无效请求?...**面试官**:很好的做法,不过现在Hystrix已经不推荐使用了,你知道有哪些替代方案吗? **李明**:我听说Resilience4j是一个不错的选择,它更轻量,而且支持函数式编程。...**李明**:有,我们把应用打包成Docker镜像,然后在Kubernetes上运行,这样可以提高部署效率。 **面试官**:那你有没有遇到过容器启动失败的问题?

    18810

    C#异步使用要点(翻译)

    异步操作时需要注意的要点 1.使用异步方法返回值应当避免使用void 在使用异步方法中最好不要使用void当做返回值,无返回值也应使用Task作为返回值,因为使用void作为返回值具有以下缺点 无法得知异步函数的状态机在什么时候执行完毕...Task.FromResult代替Task.Run 对于一些预先知道的结果或者只是一个简单的计算函数,使用Task,FromResult要比Task.Run性能要好,因为Task.FromResult只是创建了一个包装已计算任务的任务...(1 + 1); } 还有另外一种代替方法,那就是使用ValueTask类型,ValueTask是一个可被等待异步结构,所以并不会在堆中分配内存和任务分配,从而性能更优化....,这样通常会导致线程饥饿和死锁 线程饥饿(starvation):指等待时间已经影响到进程运行,如果等待时间过长,导致进程使命没有意义时,称之为饿死 死锁(deadlock):指两个或两个以上的线程相互争夺资源...ConcurrentDictionary.GetOrAdd注意场景 缓存异步结果是一种很常见的做法,ConcurrentDictionary是一个很好的集合,而GetOrAdd也是一个很方便的方法,它用于尝试获取已经存在的项

    3.8K50

    马库斯:新必应比ChatGPT更狂野,微软是故意的还是不小心?

    ,但是实际使用中预测了太多的假阳性(false positives)样本。...也就是说,过滤器太烦人了,所以在真正的搜索引擎里不能用。 可能性3:为了获取用户反馈 Bing有可能故意关闭了过滤器的限制,以获得更多关于可能出错的用户反馈。...这是一个非常糟糕的消息,不仅在人力和经济成本方面(意味着需要更多的低薪人员做糟糕的工作),而且在可信度方面,也将意味着无法保证任何新的大型语言模型的迭代是安全的。...类比医学领域发布新药,公众要求在新药发布之前在实验室内进行充分的测试,换到大型语言模型的发布,特别是如果数十亿人可能使用到,且可能存在严重的风险(例如扰乱用户的心理健康和婚姻状况)的情况下,我们也不应该让他们直接公开测试...而目前,人工智能基本上处于狂野发展的阶段,任何人都可以发布一个聊天机器人。 国会需要弄清楚发生了什么,并开始设置一些限制,特别是在情感或身体上很容易造成伤害的地方。 新闻业里,媒体也让人很失望。

    41930

    学会这几个Redis技巧,让你的程序快如闪电

    一、Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面。...大家运行调试后可以看到控制台输出的内容:向右的箭头=》是ic.Log=XTrace.Log输出的日志。 ?...Redis中布隆过滤器,去重的,面试的时候问的比较多。...2、Redis经验分享 在Linux上多实例部署,实例个数等于处理器个数,各实例最大内存直接为本机物理内存,避免单个实例内存撑爆(比方说8核心处理器,那么就部署8个实例)。...所以它既可以实现列表结构,也能队列,还能实现栈。 Q3:存放多个字段的类性能一样吗? A3:大部分场景都不会有偏差,可能对于大公司数据量比较大的场景会有些偏差。

    51140

    几个Redis使用技巧

    一、Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面。...大家运行调试后可以看到控制台输出的内容:向右的箭头=》是ic.Log=XTrace.Log输出的日志。 ?...Redis中布隆过滤器,去重的,面试的时候问的比较多。...2、Redis经验分享 在Linux上多实例部署,实例个数等于处理器个数,各实例最大内存直接为本机物理内存,避免单个实例内存撑爆(比方说8核心处理器,那么就部署8个实例)。...所以它既可以实现列表结构,也能队列,还能实现栈。 Q3:存放多个字段的类性能一样吗? A3:大部分场景都不会有偏差,可能对于大公司数据量比较大的场景会有些偏差。

    59420
    领券