asp.net core 2.0 查缺补漏
asp.net core 2.0 一些有用有趣的设置.
面向(targeting)不同的.net版本:
打开asp.net core 2.0的项目文件: xxx.csproj, 这部分:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
TargetFramework就是指向的版本. 也可以指向多个.net版本, 那就使用TargetFrameworks, 例如:
<TargetFrameworks>netcoreapp2.0;net47</TargetFrameworks>
编译后, 在bin/debug文件夹下就会有两个文件夹:

Microsoft.AspNetCore.All
并不是标准的Nuget包, 它不包含任何代码或dll, 它作为一个metapackage, 引用了很多其他的包而已
Program.cs
asp.net core 应用其实就是一个控制台应用, 运行了asp.net core相关的库而已.
program.cs里面都是对于宿主和环境的配置.
在这里, 已经进行了默认的配置.
但是如果你想捕获asp.net core启动时候的错误, 并显示错误页面, 那么:
.CaptureStartupErrors(true)
是否应该监听Microsoft.AspNetCore.Hosting.Server.IServer制定的url(ipv4, v6, hostname, localhost, unix socket), 可以使用:
.PreferHostingUrls(true)
监听指定的url:
.UseUrls("http://0.0.0.0:5000")
使用ApplicationInsights:
.UseApplicationInsights()
Startup.cs
startup里面是用来预加载/配置服务和中间件的.
ConfigureServices方法用来注册服务.
Configure方法用来配置请求管道.
添加mvc中间件, 就在ConfigureServices方法里:
services.AddMvc();
使用mvc中间件, 在Configure里:
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
Dependency Injection
每次调用创建一个实例:
services.AddTransient<IEmailService, EmailService>();
每次http请求创建一个实例:
services.AddScoped<IEmailService, EmailService>();
只创建一个实例:
services.AddSingleton<IEmailService, EmailService>();
如果你不想让容器自动dispose掉服务(容器会自动调用服务的Dispose方法), 那么你应该手动添加服务, 例如:
services.AddSingleton(new EmailService());
http 请求管道中间件的顺序 最佳实践:
1. 异常处理中间件
2. 静态文件中间件
3. 用户验证中间件
4. mvc中间件
创建自定义中间件
有两种方法:
1. 直接在Startup里面写
可以使用四个方法: Run, Map, MapWhen, Use.
Run方法直接短路, 返回Response.
Map用于处理分支, 判断请求地址的开头, 为分支添加特定中间件等等
MapWhen也是处理分支, 但是可以控制分支的状态
Use, 可以调用下一个中间件(next.Invoke())或者短路请求.
2. 单独写一个类
public class CommunicationMiddleware
{
private readonly RequestDelegate _next; public CommunicationMiddleware(RequestDelegate next)
{
_next = next;
} public async Task Invoke(HttpContext context)
{
await _next.Invoke(context);
}
}
然后再写一个extension 方法:
public static class CommunicationMiddlewareExtension
{
public static IApplicationBuilder UseCommunicationMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<CommunicationMiddleware>();
}
}
最后在Startup的Configure里调用即可:
app.UseCommunicationMiddleware();
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
Url Redirection 和 Url Rewriting
他们是不同的.
url redirection是从服务器端绕了一圈, 然后回到客户端, 客户端收到301或者302之后, 再调用新地址.
url rewriting是服务器端自己完成的, 客户端一无所知.
可以这样来使用Url Rewriting:
var options = new RewriteOptions()
.AddRewrite("NewUser", "/User/Registration/Index", false);
app.UseRewriter(options);
异常处理
默认情况下400到599的错误信息都不会显示. 就会显示一个异常页面.
但是可以自定义错误页面:
app.UseStatusCodePages("text/plain", "HTTP ERROR: Status Code: {0}");
多个环境
asp.net core 2.0默认先加载appSettings.json, 然后根据环境不同再加载appSettings.{environment}.json. 如果有必要就覆盖或替换一些值.
根据环境使用不同的Startup文件:
.UseStartup("AssemblyName")
StartupDevelopment, StartupStaging, StartupProduction.
Web Api的三种风格
RTC, 包含Action的Name
Rest, 它是一种http协议的最佳实践方式而已. 主要目的是管理和控制资源.
HATEOAS, 客户端通过遍历http response里面的超媒体链接, 可以动态导航到所需的资源, 酷.
使用HATEOAS, 需要安装包Halcyon.mvc
asp.net core 2.0 查缺补漏的更多相关文章
- Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?
在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanc ...
- 跨平台运行ASP.NET Core 1.0
前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为 ...
- 跨平台运行ASP.NET Core 1.0(转载)
前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为 ...
- Amazing ASP.NET Core 2.0
前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...
- ASP.NET Core 2.0 使用支付宝PC网站支付
前言 最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的 ...
- [译]ASP.NET Core 2.0 会话状态
问题 如何在ASP.NET Core 2.0中存储会话状态? 答案 创建一个空项目,修改Startup类的ConfigureServices()方法,添加会话状态服务和它后台的存储服务: public ...
- [译]ASP.NET Core 2.0 路由引擎
问题 ASP.NET Core 2.0的路由引擎是如何工作的? 答案 创建一个空项目,为Startup类添加MVC服务和请求中间件: public void ConfigureServices(ISe ...
- [译]ASP.NET Core 2.0 视图组件
问题 如何在ASP.NET Core 2.0中使用视图组件? 答案 新建一个空项目,修改Startup类并添加MVC服务和中间件: public void ConfigureServices(ISer ...
- Android查缺补漏--ContentProvider的使用
ContentProvider (内容提供者)是一种共享型组件,可以为系统内应用于与应用之间提供访问接口. ContentProvide要想正常工作需要三个关键点: ContentProvider:对 ...
随机推荐
- 单源最短路径 dijkstra算法实现
本文记录一下dijkstra算法的实现,图用邻接矩阵表示,假设图为无向图.而且连通,有向图,不连通图的做法相似. 算法简述: 首先确定"单源"的源.假设是第0个顶点. 维护三个数组 ...
- 【Cocos游戏实战】功夫小子第七课之游戏主功能场景逻辑功能和暂停功能场景的分析和实现
CSDN的markdown编辑器是吃屎了么! !.什么玩意.!写了一半写不了东西还全没了,搞个毛线! 本节课的视频教程地址是:第七课在此 假设本教程有帮助到您,希望您能点击进去观看一下,并且如今注冊成 ...
- D02 TED Elon Mulsk The future we're building — and boring
摘要:精选TED. 每个音频不超过2分钟,学英语和吸收伟大思想两不误 音频: https://n1audio.hjfile.cn/st/de745862-d5f4-4ef4-9218-d79361ca ...
- [UWP]了解模板化控件(7):支持Command
以我的经验来说,要让TemplatedControl支持Command的需求不会很多,大部分情况用附加属性解决这个需求会更便利些,譬如UWPCommunityToolkit的HyperlinkExte ...
- 青否云 - 小程序待办事项 wxapp开源系统
青否云最新开源系统:小程序待办事项 wxapp-demo 青否云 小程序 demo 下载地址:https://github.com/qingful/wxapp-demo 官网 http://cloud ...
- JDBC中rs.beforeFirst()
写在前面: 最近的项目比较老,用到了jdbc查询数据,展示数据.有时候一个查询语句的ResultSet需要用到好几次,即需要遍历好几次同一个查询结果集,那要怎么办呢? 使用如下方式即可解决 其实这里理 ...
- python每天进步一点点
1. apply, 可以调用函数和参数,如apply(Fun,(xxx,xxx)) 2. Format, 很好处理字符串的对齐命名,其他进制,打印等. 3. input(),接受输入 4. str() ...
- JavaScript基础1——基本概念
关于JS的概念 JavaScript 是一种弱类型语言. JavaScript 是一种客户端脚本语言(脚本语言是一种轻量级的编程语言). JavaScript是基于对象的.(因为面向对象需要具有封装. ...
- iOS tableViewCell 在cell赋值、网络加载照片位置偏移大小错乱,做一个类似qq列表的tableview 更新3
更新3: 问题 加载慢!(一时间给的处理负载过大,要分散)在下载图片,判断状态后 对每个cell对图片灰置图片处理保存,影响了主线程的操作 :上拉加载时,无法上下滑动tableview 无法点击cel ...
- [array] leetcode-55. Jump Game - Medium
leetcode-55. Jump Game - Medium descrition Given an array of non-negative integers, you are initiall ...