razor

(7)ASP.NET Core 中的错误处理

倖福魔咒の 提交于 2020-04-22 05:12:00
1.前言 ASP.NET Core处理错误环境区分为两种:开发环境和非开发环境。 ● 开发环境 :开发人员异常页。 ● 非开发环境 :异常处理程序页、状态代码页。 在Startup.Configure方法里面我们会看到如下代码: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { // 开发环境 } else { // 非开发环境 } } env.IsDevelopment()是判断应用程序运行是在开发环境还是非开发环境,具体配置在Properties/launchSettings.json,找到ASPNETCORE_ENVIRONMENT属性,默认值是开发环境(Development),具体环境配置知识点后面我们再来学习下。 2.开发人员异常页 向Startup.Configure方法添加代码,以当应用在开发环境中运行时启用此页: if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 开发人员异常页仅当应用程序在开发环境中运行时才会启用,而且调用UseDeveloperExceptionPage要配置于任何要捕获其异常的中间件前面。

ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

旧时模样 提交于 2020-04-21 15:41:26
原文: Filters 作者: Steve Smith 翻译: 刘怡(AlexLEWIS) 校对: 何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码。过滤器可以配置为全局有效、仅对控制器有效或是仅对 Action 有效。 查看或下载演示代码 . 过滤器如何工作? 不同的过滤器类型会在执行管道的不同阶段运行,因此它们各自有一套适用场景。根据你实际要解决的问题以及在请求管道中执行的位置来选择创建不同的过滤器。运行于 MVC Action 调用管道内的过滤器有时被称为 过滤管道 ,当 MVC 选择要执行哪个 Action 后就会先执行该 Action 上的过滤器。 不同过滤器在管道的不同位置运行。像授权这样的过滤器只运行在管道的靠前位置,并且其后也不会跟随 action。其它过滤器(如 action 过滤器等)可以在管道的其它部分之前或之后执行,如下所示。 选择过滤器 授权过滤器 用于确定当前用户的请求是否合法。 资源过滤器 是授权之后第一个用来处理请求的过滤器,也是最后一个接触到请求的过滤器(因为之后就会离开过滤器管道)。在性能方面,资源过滤器在实现缓存或短路过滤器管道尤其有用。 Action 过滤器 包装了对单个 action 方法的调用,可以将参数传递给 action 并从中获得 action result。 异常过滤器 为 MVC

(1)ASP.NET Core 应用启动Startup类简介

こ雲淡風輕ζ 提交于 2020-04-21 06:52:45
1.前言 Core与早期版本的 ASP.NET 对比,配置应用程序的方式的 Global.asax、FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Startup.cs取代了。Program.cs作为Web应用程序的默认入口,在没有任何修改的情况下,会调用同目录下Startup.cs中的ConfigureServices 和 Configure方法。 2.Startup类 Startup类配置服务和应用的请求管道。Program.Main方法是应用程序的托管入口。在构建应用程序的主机(WebHost)时,系统为应用程序指定 Startup 类,而Main入口通过主机生成器(IWebHostBuilder)调用Build时,生成对应的应用程序的主机(WebHost),并启动运行(Run)。 public class Program { public static void Main( string [] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder( string [] args) => WebHost.CreateDefaultBuilder(args) .UseStartup

ASP.NET Core MVC入门——2

不问归期 提交于 2020-04-19 11:36:14
如何识别到Controller: asp.net core mvc是通过URL来识别请求中的控制器,默认URL路由逻辑是 /[Controller]/[ActionName]/[Parameters] 默认URL的路由格式在项目中的Startup.cs中有定义,ActionName表示控制器类中的方法。 app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); 如果URL 是 localhost:59191/HelloWorld,则表示对应访问HelloWorldController类的Index方法。 如果URL 是 localhost:59191/HelloWorld/Welcome,则表示对应访问HelloWorldController类的Welcome方法。 我们尝试修改Welcome方法如下 public string Welcome(string name, int numTimes = 1) { return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}"); }

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]

依然范特西╮ 提交于 2020-04-18 10:21:33
由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实现路由的 EndpointRoutingMiddleware 和 EndpointMiddleware 中间件上。ASP.NET Core MVC利用路由系统为它分发请求,并在此基础上实现针对目标Controller的激活、Action方法的选择和执行,以及最终对于执行结果的响应。在介绍的实例演示中,我们将对上面创建的ASP.NET Core作进一步改造,使之转变成一个MVC应用。 一、注册服务与中间件 ASP.NET Core框架内置了一个原生的依赖注入框架,该框架利用一个依赖注入容器提供管道在构建以及请求处理过程中所需的服务,而这些服务需要在应用启动的时候被预先注册。对于ASP.NET Core MVC框架来说,它在处理HTTP请求的过程中所需的一系列服务同样需要预先注册。对这个概念有了基本的了解之后,相信读者朋友们对如下所示的代码就容易理解了。 using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection;

逃脱Asp.Net MVC框架的枷锁,使用Razor视图引擎

♀尐吖头ヾ 提交于 2020-04-18 08:32:57
更多背景参看 前传: Razor视图引擎浅析 后续: eLiteWeb框架MVC(Model-View-Command) 机制解析 为什么要这么做? 1. Asp.Net MVC 其实也不是太好 2. 我有自己的敏捷Web框架, 仍然想用Razor引擎 3. 动态编译很有意思,这也是将来的一个趋势,如果有人有兴趣,我倒是很想写写这方面的内容. 可是也有这些想法的人并不多,找来找去,这方面的资料和论述极其之少。与其临渊羡鱼,不如退而结网。自己动手,丰衣足食。 如Razor引擎浅析所述,Razor的两大主要功能,模板文件和动态编译器。我们能不能单纯就要而且只要这俩主要特性? 其它那些智能查找视图文件等,虽不能说是垃圾,也是束缚手脚的条条框框,我完全可以自己做,失去的是一条绳索,获得是整个世界。 保持模板功能,特别是设计时智能语法支持,很简单,创建项目时选择MVC项目,然后把其它MVC相关的引用删掉只剩下Razor就好了。 编译? 你根本就找不到这一段代码,被淹没在大量的辅助代码中。幸好,我这里已经找到了,简化修改之后,就剩下了了几行,你就可以直接使用在甚至不必是Web项目中。 (本文版权属于© 2012 - 2013 予沁安 | 转载请注明作者和出处 WangHaoBlog.com ) 首先, 用到的Razor域名空间。 using System.Web.Razor; using

X-Admin&ABP框架开发-代码生成器

你。 提交于 2020-04-18 06:05:48
   在日常开发中,有时会遇到一些相似的代码,甚至是只要CV一次,改几个名称,就可以实现功能了,而且总归起来,都可以由一些公用的页面更改而来,因此,结合我日常开发中使用到的页面,封装一个 适合自己 的代码生成器,仅处于入门阶段,包括生成的代码结构都仅是把框架展示出来,内部详细暂时没得,针对于应用服务中的接口和实现,相关Dto,MVC中的控制器、视图及视图模型进行了模板制作及生成相关的文件。 一、设计思路   方案一:开始想到的是,搞个控制台,然后给一个.cs文件,然后控制台去解析其中的命名空间,类名,属性,再用配置好的razor模板去替换,再生成相关的一些文件出来,但是发现,万事开头难,第一步去解析cs文件就不好搞,找了网上的资料,不太好弄,干脆想了下,放弃这种方案,因为想到了另一种常用的方案。   方案二:直接在控制台中,配置控制台去访问数据库,然后给定指定表名,去读取数据库中的表和字段,再反过来去生成相关文件,但是这里会遇到一个这样的问题,比如我使用的是mysql,mysql本身有个配置表名大小写忽视的,这样一来,获取到的表名都将是小写打头,尽管可能配置了是区分大小写,但是,我设计表时,采用Pre_table,形式区分业务表,比如是CRM模块需要用到的CRM_Client,那将用CRM打头,后面这部分Client才是实际代码中的类名,种种问题都有可能,但是作为没有那么多可能性下

脱离MVC使用Razor模板引擎

北城余情 提交于 2020-04-18 05:17:56
1.非MVC下使用Razor 借助开源的RazorEngine,我们就可以在非asp.net mvc项目中使用Razor引擎了。 甚至在winform项目中都可以使用Razor(就可以写一些灵活度较高的代码生成器了)。 2.工作流程 通过和杨中科大大的交流,我大致得出了Razor的工作流程,如下图所示。本篇博文大致脉络 大体上依据这张图。 尝试使用 1.导入DLL 2.创建cshtml 在非mvc项目中创建cshtml文件(cshtml文件可以用自动提示) 方法很简单,新建一个html,新建的时候改名为XX.cshtml即可。 像这样我们的前期准备工作就做完了!开始玩儿起来吧。 **3.用c#语法在cshtml中写一个循环 ** @{}中可以写C#代码,C#代码可以和html代码混排, 像下图这样写是可以的,让小编想起了做php的岁月。 4.在一般处理程序中读取 从开头的流程图得知,想让程序转起来,还得用Razor对象,读取一下cshtml。 让他形成一个程序集,再生成html。 图上画这绕,其实用起来并不太复杂。 像下图这样就可以了。 5.cshtml如何读取对象中的值 1)首先在一般处理程序中,调用Parse方法的时候多给一个参数。 这个参数,就是你在cshtml中想要读取对象。(理论上啥都行) 2)然后再cshtm中就可以找到这个对象了。 @Model.Age @Model

基于vs插件的abp代码生成器

坚强是说给别人听的谎言 提交于 2020-04-18 05:14:55
  工作了这么多年,一直都在小公司摸爬滚打,对于小公司而言,开发人员少,代码风格五花八门。要想用更少的人,更快的速度,开发更规范的代码,那自然离不开代码生成器。之前用过动软的,也用过T4,后面又接触了力软。相较而言,力软的代码生成做的体验还是很不错的(不是给他打广告哈)。最近在看abp,发现要按他的规范来开发的话,工作量还是蛮大的,所以他们官方也开发了配套的代码生成器,不过都要收费。国内这块好像做的好点的就52abp了,还有个Magicodes.Admin。前者是类似于官方的做成了vs插件,还比较好用,后者是线上的,据说是生成后可以同步到git仓库,咱也没用过,所以也不清楚好不好用。前段时间稍微空闲点,就参考Magicodes.Admin和52abp搭了个框子,顺便也研究了下基于vs插件的代码生成器,abp的代码生成器也可以做成力软那样的,只不过需要用户先update-database数据库而已,代码生成部分原理都差不多,这里就不提了,这里主要是记录下vs插件开发代码生成器的过程。 先上下框子截图: 开发过程: 新建VS插件项目 1、新建项目 这里我们要新建VSIX Project 2、建好项目后,右键添加新建项,这里我们选Custom Command 添加好了后,我们修改Command1Package.vsct这个文件: 这里改的是菜单显示的文字,然后我们可以F5运行起来瞧瞧

.NET Core技术研究-HttpContext访问的正确姿势

拟墨画扇 提交于 2020-04-13 07:54:08
原文: .NET Core技术研究-HttpContext访问的正确姿势 将ASP.NET升级到ASP.NET Core之后,相信大家都会遇到HttpContext.Current无法使用的问题。这也是我们迁移ASP.NET Core必须解决的问题。 本文我们详细讨论一下,使用HttpContext的正确姿势。 先列一下使用HttpContext的具体场景: 1. 在Controller层访问HttpContext 2. 在中间件中使用HttpContext 3. 在数据访问层使用HttpContext 4. 在后台线程中访问HttpContext 5. 在Razor页面模型中访问HttpContext 6. 在Razor视图中访问HttpContext 可能还有其他的应用场景。接下来我们按场景一一示例解决。 首先本文用的是ASP.NET Core 3.1 一、新建一个ASP.NET Core Web应用程序 二、在Controller层访问HttpContext 示例代码中HomeController继承与Controller抽象类 Controller父类中继承与ControllerBase抽象类 其中ControllerBase抽象类有提供了对HttpContext的访问 所以,我们在Controller这一层可以按以下方式访问HttpContext: 1 public