ASP.NET Core中间件实现分布式 Session分分快三计划

作者:编程技术

付出情形:Win 10 x64、VS2017 15.6.4、.NET Core SDK 2.1.101、.NET Core Runtime 2.0.6

1.3.2. Session保存到Redis中

福如东海分布式Session方法官方提供有Redis、Sql Server等。但是Sql Server功能对于这种以key/value获取值的方法远远不及Redis功效高,所以那边笔者选拔Redis来作示例完毕布满式Session。

准备Redis

出于这两天Redis还不支持windows,所以大家在设置Redis的时候希图一台linux操作系统,作者这里的种类是ubuntu 16.04;下载及安装方式能够参照官方示例。

设置成功以往运营Redis 服务,如若见到以下音信,就意味着Redis运维成功:

分分快三计划 1

2017-10-30-20-33-47

连带布署

首先必要用Nuget安装包Microsoft.Extensions.Caching.Redis,安装成功现在就能够在app.csproj文件中能够见到。

分分快三计划 2

2017-10-30-20-12-20

Configure主意中增加app.UseSession();然后再ConfigureServices添加Redis服务

public void ConfigureServices(IServiceCollection services){
    services.AddDistributedRedisCache(options=>{
        options.Configuration="127.0.0.1"; //多个redis服务器:{RedisIP}:{Redis端口},{RedisIP}:{Redis端口}
        options.InstanceName="sampleInstance";
    });
    services.AddMvc();
    services.AddSession();
}

上述代码中作者只用八个Redis服务器来作测量检验,实际项目中供给多个Redis服务器;配置格局如:options.Configuration="地址1:端口,地址2:端口";,这里小编并不曾给端口而是用的默许端口6379

完全代码

Startup.cs

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Caching.Redis;
using Microsoft.Extensions.Caching.Distributed;

namespace app{    
    public class Startup{        
        public Startup(IConfiguration configuration)        
        {            
            Configuration = configuration;        
        }
        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services){                     
            services.AddDistributedRedisCache(options =>{                
                options.Configuration = "127.0.0.1";                
                options.InstanceName = "sampleInstance";            
            });            
            services.AddMvc();            
            services.AddSession();        
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env){            
            if (env.IsDevelopment())
            {                
                app.UseDeveloperExceptionPage();            
            }            
            else            
            {                
                app.UseExceptionHandler("/Home/Error");            
            }
            app.UseSession();
            app.UseStaticFiles();
            app.UseMvc(routes =>{                
                routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");           
            });        
        }    
    }
}

HomeControler.cs

public class HomeController : Controller   
{        
    public IActionResult Index()       
    {            
        HttpContext.Session.Set("apptest",Encoding.UTF8.GetBytes("apptestvalue"));
        return View();        
    }
    public IActionResult ShowRedis()        
    {            
        byte[] temp;
        if(HttpContext.Session.TryGetValue("apptest",out temp))
        {                
            ViewData["Redis"]=Encoding.UTF8.GetString(temp);            
        }            
        return View();        
    }
}

Index页面只做一件事给Session设置值:"apptestvalue",ShowRedis页面展现Session值。

ShowRedis.cshtml

Redis Session Value:ViewData["Redis"]

示范结果

今天起首运转页面,首先直接走入到ShowRedis页面,Session值展现为空

分分快三计划 3

2017-10-31-06-47-24

当点击SetSessionValue而后,重返ShowRedis页面,Session就值展现出来了

分分快三计划 4

2017-10-31-23-56-58

看到apptestvalue代表Session值已经存到Redis里面,怎么着评释apptestvalue值是从Redis里面取到呢?接下去就证实给大家看。

职务1 - 提供静态文件

为了提供静态文件,您必需配备中间件以向管道加多静态文件。 那是由此从Startup.Configure方法调用UseStaticFiles扩充方法来促成的。

在那职分中,您将创制叁个空的ASP.NET Core 1.0门类并将其布署为提供静态文件。

  1. 打开Visual Studio 2015并精选文件| 新项目...伊始八个新的消除方案

  2. 在“新建项目”对话框中,选择Visual C#|下的ASP.NET Web应用程序 Web选项卡,并保障采纳.NET Framework 4.6。 将项目命名叫Asp.NET_Core_TEST,选用三个任务,然后单击分明。

分分快三计划 5

创造新的ASP.NET Web应用程序项目

  1. 在“新建ASP.NET项目”对话框中,选取“ASP.NET Core Templates”。 单击“确定”。

分分快三计划 6

行使ASP.NET Core航空模型板创立新品类

4. 将Microsoft.AspNet.StaticFiles包增多为project.json的依赖项,能够在dependencies节点下增多。

分分快三计划 7

"dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",

"Microsoft.AspNetCore.StaticFiles": "1.1.0"

,
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0"
  },

分分快三计划 8

   当然,也能够透过Nuget增添相关的信赖包

分分快三计划 9

5. 打开Startup.cs文本,并在Hello中间件以前的Configure格局中增添UseStaticFiles办法调用。

分分快三计划 10

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    //添加静态文件支持管道
    app.UseStaticFiles();
    //添加静态文件和默认文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

分分快三计划 11

6. 在wwwroot文本夹中成立八个名叫index.html的文书,当中饱含以下内容。

分分快三计划 12

<!DOCTYPE html>
<html>
<head>
     <meta charset="utf-8" />
     <title>Hello static world!</title>
</head>
<body>
     <h1>Hello from ASP.NET Core!</h1>
</body>
</html>

分分快三计划 13

  1. 运作应用程序并导航到根。 它应有展现hello world中间件。

分分快三计划 14

  1. 导航到index.html,它应有出示wwwroot中的静态页面。

分分快三计划 15

 

 

分分快三计划 16

1.1. 中间件原理

练习3:编写自定义中间件

能够统一到HTTP诉求管道中的小应用程序组件统称为中间件。 ASP.NET Core 1.0全数对中间件的融会帮衬,它们在应用程序运营时期在应用程序的Configure办法中总是。

在本演练中,您将成立贰个依据查询字符串值设置当前文化的高级中学级件类。

留意:大家在本演练中使用本地化相关中间件作为示范场景,但在大大多应用程序中,您将采纳ASP.NET Core的放置扶植本地化帮助。

分分快三计划 17

1.3.3. 贯彻布满Session

前面早就将Session保存到Redis中,然而大家不通晓那些值是还是不是是真的保存到Redis里面去了依旧在项目内存中;所以这里就贯彻在多少个不的应用程序(或两台区别的机械)中国共产党享Session,也正是兑现遍布式Session,分布式即表示了不一样的机械不一致的应用程序,但频仍有下边包车型的士一种进退维谷的情景,就终于种种HTTP乞请时都辅导了同样的cookie值。

分分快三计划 18

2017-10-30-20-35-19

以至这几个的主题素材的案由是各种机器上边的ASP.NET Core的应用程序的密钥是不均等的,所以并未有艺术得到前二个应用程序保存的Session数据;为了化解那一个标题,.NET Core团队为提供了Microsoft.AspNetCore.DataProtection.AzureStorageMicrosoft.AspNetCore.DataProtection.Redis包将密钥保存到Azure或Redis中。这里选取将密钥保存到Redis。

分分快三计划 19

分享密钥

利用Microsoft.AspNetCore.DataProtection.Redis包提供的PersistKeysToRedis重载方法将密钥保存到Redis里面去。所以这里必要在ConfigureServices主意中添AddDataProtection()

var redis = ConnectionMultiplexer.Connect("127.0.0.1:6379");
    services.AddDataProtection()
        .SetApplicationName("session_application_name")
        .PersistKeysToRedis(redis, "DataProtection-Keys");

下边演示怎么样贯彻遍布式Session

安排步骤

  • 与此同有的时候间创制多少个项目,分别为app1和app2
  • 添加Microsoft.AspNetCore.DataProtection.RedisStackExchange.Redis.StrongName

分分快三计划 20

2017-10-31-23-41-37

  • 鉴于在同样台机械上,ASP.NET Core程序暗许运维的时候端口为五千,由于app1已经攻克了,所以将app2的启端口安装为5001

分分快三计划 21

2017-10-31-23-54-19

总体代码

  • app1项目

Startup.cs

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Caching.Redis;
using Microsoft.Extensions.Caching.Distributed;

namespace app1{    
    public class Startup{        
        public Startup(IConfiguration configuration)        
        {            
            Configuration = configuration;        
        }
        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services){
            var redis = ConnectionMultiplexer.Connect("127.0.0.1:6379");
            services.AddDataProtection()
                .SetApplicationName("session_application_name")
                .PersistKeysToRedis(redis, "DataProtection-Keys");          
            services.AddDistributedRedisCache(options =>{                
                options.Configuration = "127.0.0.1";                
                options.InstanceName = "sampleInstance";            
            });            
            services.AddMvc();            
            services.AddSession();        
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env){            
            if (env.IsDevelopment())
            {                
                app.UseDeveloperExceptionPage();            
            }            
            else            
            {                
                app.UseExceptionHandler("/Home/Error");            
            }
            app.UseSession();
            app.UseStaticFiles();
            app.UseMvc(routes =>{                
                routes.MapRoute(name: "default",template: "{controller=Home}/{action=Index}/{id?}");           
            });        
        }    
    }
}

HomeControler.cs

public class HomeController : Controller   
{        
    public IActionResult Index()       
    {            
        HttpContext.Session.Set("app1test",Encoding.UTF8.GetBytes("app1testvalue"));
        return View();        
    }
    public IActionResult ShowRedis()        
    {            
        byte[] temp;
        if(HttpContext.Session.TryGetValue("app1test",out temp))
        {                
            ViewData["Redis"]=Encoding.UTF8.GetString(temp);            
        }            
        return View();        
    }
}

ShowRedis.cshtml

Redis Session Value:ViewData["Redis"]
  • app2项目

Startup.cs
安插同app1配置同样。

HomeControler.cs

public class HomeController : Controller   
{        
    public IActionResult Index()       
    {            
        byte[] temp;
        if(HttpContext.Session.TryGetValue("app1test",out temp))
        {                
            ViewData["Redis"]=Encoding.UTF8.GetString(temp);            
        }  
        return View();        
    }
}

Index.cshtml

ViewData["Redis"]

运维效果

  • app1 项目

第贰次张开进去ShowRedis页面,Session值为空

分分快三计划 22

2017-10-31-06-47-24

点击SetSessionValue以后,再回到ShowRedis页面:

分分快三计划 23

2017-11-01-00-04-13

  • app2项目,直接在浏览器访谈:http://localhost:5001

分分快三计划 24

2017-11-01-00-00-30

上述是用Redis达成布满式Session示例。

备注

本小说所聊到的Asp.NET Core 1.1 preview 1,是眼下的风尚版本,之后会写一篇特地介绍Asp.NET Core 1.1 preview 1的文章。尽情期望。希望本文对你全部助于。

分分快三计划 25

1.3. Cookies和session中间件

义务5 - 从注重注入系统到中间件的流程选项

ASP.NET Core是从根本上统一准备的,支持和采取信任注入。 ASP.NET Core应用程序能够通过将它们注入到Startup类中的方法中来利用内置框架服务,而且应用程序服务也足以配备为注入。 ASP.NET Core提供的私下认可服务容器提供了一个细微的作用集,并不用于替换其余容器。

在这里义务中,您将利用信任注入系统安插RequestCultureMiddleware选项。

 

  1. 更改RequestCultureMiddleware构造函数以应用IOptions <RequestCultureOptions>而不是RequestCultureOptions并拿走options参数的值。 化解遗失的正视关系。

    public RequestCultureMiddleware(RequestDelegate next, IOptions options) {

     this.next = next;
     options = options.Value;
    

    }

2. 更新RequestCultureMiddlewareExtensions类,删除带有options参数的法子,并在另一个方式中调用UseMiddleware <RequestCultureMiddleware>,如上边包车型地铁代码片段所示。

分分快三计划 26

public static class RequestCultureMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
    {
         return builder.UseMiddleware<RequestCultureMiddleware>();
    }
}

分分快三计划 27

3. 在Startup.cs中,将UseRequestCulture中间件更换为不接受其余参数。

app.UseRequestCulture();

4. 在位于同一文件中的ConfigureServices方法中,使用services.Configure <RequestCultureOptions>主意增多一行配置文化,并丰裕对AddOptions方法的调用,如上面包车型大巴代码片段所示。

分分快三计划 28

public void ConfigureServices(IServiceCollection services)
{
    // DI的设置选项
    services.AddOptions();

    services.Configure<RequestCultureOptions>(options =>
    {
        options.DefaultCulture = new CultureInfo(this.configuration["culture"] ?? "zh-cn");
    });
}

分分快三计划 29

  1. 运营应用程序并表明是或不是正在从信赖注入系统中配置选项。

 

分分快三计划 30

1.1.2. 中间件执行进度

举三个演示来演示中间件的实践进度(分别有六当中间件:日志记录、权限验证和路由):当呼吁进入应用程序时,实施奉行日志记录的中间件,它记录央浼属性并调用链中的下叁个中间件权限验证,假诺权力验证通过则将调控权传递给下叁此中间件,不经过则设置401 HTTP代码并重回响应,响应传递给日志中间件举行重返。

分分快三计划 31

2017-10-10-22-47-32

演练1:使用静态文件

静态文件(富含HTML文件,CSS文件,图像文件和JavaScript文件)是应用程序将平素提供给顾客端的成本。

在本练习中,您将配置项目以提供静态文件。

 

 

  1 using Essensoft.AspNetCore.Payment.Alipay;
  2 using Essensoft.AspNetCore.Payment.Alipay.Domain;
  3 using Essensoft.AspNetCore.Payment.Alipay.Notify;
  4 using Essensoft.AspNetCore.Payment.Alipay.Request;
  5 using Microsoft.AspNetCore.Mvc;
  6 using System.Threading.Tasks;
  7 
  8 namespace AlipaySample.Controllers
  9 {
 10     public class AlipayController : Controller
 11     {
 12         // 支付宝请求客户端(用于处理请求与其响应)
 13         private readonly AlipayClient _client = null;
 14 
 15         // 支付宝通知客户端(用于解析异步通知或同步跳转)
 16         private readonly AlipayNotifyClient _notifyClient = null;
 17 
 18         // 赋值依赖注入对象
 19         public AlipayController(AlipayClient client, AlipayNotifyClient notifyClient)
 20         {
 21             _client = client;
 22             _notifyClient = notifyClient;
 23         }
 24 
 25         [HttpPost]
 26         public async Task<IActionResult> PagePay(string out_trade_no, string subject, string total_amount, string body, string product_code, string notify_url, string return_url)
 27         {
 28             // 组装模型
 29             var model = new AlipayTradePagePayModel()
 30             {
 31                 Body = body,
 32                 Subject = subject,
 33                 TotalAmount = total_amount,
 34                 OutTradeNo = out_trade_no,
 35                 ProductCode = product_code,
 36             };
 37 
 38             var req = new AlipayTradePagePayRequest();
 39 
 40             // 设置请求参数
 41             req.SetBizModel(model);
 42 
 43             // 设置异步通知URL
 44             req.SetNotifyUrl(notify_url);
 45 
 46             // 设置同步跳转URL
 47             req.SetReturnUrl(return_url);
 48 
 49             // 页面请求处理 传入 'GET' 返回的 response.Body 为 URL, 'POST' 返回的 response.Body 为 HTML.
 50             var response = await _client.PageExecuteAsync(req, null, "GET");
 51 
 52             // 重定向到支付宝电脑网页支付页面.
 53             return Redirect(response.Body);
 54         }
 55 
 56         /// <summary>
 57         /// 电脑网页支付-同步跳转
 58         /// 常用于展示订单支付状态页,建议在异步通知统一做业务处理,而不是在此处.
 59         /// </summary>
 60         /// <returns></returns>
 61         [HttpGet]
 62         public async Task<IActionResult> PagePayReturn()
 63         {
 64             try
 65             {
 66                 // 以 AlipayTradePagePayReturnResponse 类型 解析
 67                 var notify = await _notifyClient.ExecuteAsync<AlipayTradePagePayReturnResponse>(Request);
 68                 return Content("成功:"   notify.OutTradeNo);
 69             }
 70             catch
 71             {
 72                 return Content("参数异常/验签失败");
 73             }
 74         }
 75 
 76         /// <summary>
 77         /// 电脑网页支付-异步通知
 78         /// 常用于订单业务处理
 79         /// </summary>
 80         /// <returns></returns>
 81         [HttpPost]
 82         public async Task<IActionResult> PagePayNotify()
 83         {
 84             try
 85             {
 86                 // 以 AlipayTradePagePayNotifyResponse 类型 解析
 87                 var notify = await _notifyClient.ExecuteAsync<AlipayTradePagePayNotifyResponse>(Request);
 88                 if ("TRADE_SUCCESS" == notify.TradeStatus) // 订单是否交易完成
 89                 {
 90                     // 业务代码
 91                     // ...
 92                     // ...
 93 
 94                     //返回给支付宝成功内容,停止继续通知
 95                     return Content("success", "text/plain");
 96                 }
 97                 // 订单其他状态均返回给支付宝空内容.
 98                 return NoContent();
 99             }
100             catch
101             {
102                 // 参数异常/验签失败均返回给支付宝空内容.
103                 return NoContent();
104             }
105         }
106     }
107 }

1.1.3. 中间件的配置

中间件配置首假诺用RunMapUse办法开展示公布局,三者的两样参见上篇ASP.NET Core 运营规律解析;轻便的中间件可以一直利用佚名方式即可搞定,如下代码:

app.Run(async (context,next) =>
        {
            await context.Response.WriteAsync("environment "   env);
            await next();
        });

例如想引用中间件,就须求单独封装到贰个类中进行调用。

职分2 - 将中间件移动到自个儿的类别

在这里任务中,您将中间件移动到贰个独立的文书。

  1. 右键单击MiddlewareApp品种,然后选取添加| 类...,将文件命名称为RequestCultureMiddleware.cs,然后单击增添。

2. 加多多少个构造函数,它承受贰个RequestDelegate参数并运用以下代码段将其分配给二个私家字段。 在急需时继续深入分析错过的using语句。

RequestCultureMiddleware.cs

分分快三计划 32

public class RequestCultureMiddleware
{
    private readonly RequestDelegate next;

    public RequestCultureMiddleware(RequestDelegate next)
    {
        this.next = next;
    }
}

分分快三计划 33

分分快三计划 34

  1. 增添以下办法与在此在此之前加上到Startup.cs文件的内联中间件委派的剧情。

RequestCultureMiddleware.cs

分分快三计划 35

namespace MiddlewareApp
{
    public class RequestCultureMiddleware
    {
        private readonly RequestDelegate next;
        public RequestCultureMiddleware(RequestDelegate next)
        {
            this.next = next;
        }
        public Task Invoke(HttpContext context)
        {
            var cultureQuery = context.Request.Query["culture"];
            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
            }

            // 调用管道中的下一个代理/中间件
            return this.next(context);
        }
    }
}

分分快三计划 36

4. 在文书的最底层(也可单独出来),增加四个类,通过IApplicationBuilder上的恢弘方法公开中间件。

RequestCultureMiddleware.cs的公文底部

分分快三计划 37

public static class RequestCultureMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestCultureMiddleware>();
    }
}

分分快三计划 38

5. 回来程序集Asp.NET_Core_TEST中,加多MiddlewareApp的Core类库引用,在Startup.cs文件中,使用对app.UseRequestCulture()艺术的调用替换内联合中学间件委托,以将新的中等件类增添到HTTP管道。 达成后,您的Configure措施应如下所示:

分分快三计划 39

Startup.cs的Configure方法

分分快三计划 40

public void Configure(IApplicationBuilder app)
{
    app.UseIISPlatformHandler();

    app.UseRequestCulture();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync($"Hello {CultureInfo.CurrentCulture.DisplayName}");
    });

}

分分快三计划 41

  1. 运作应用程序,并表达中间件以后用作类运营。

 

分分快三计划 42

1.1.1. 怎么着是中间件

中间件是段代码用于拍卖伏乞和响应,平时几此中间件链接起来变成管道,由各当中间件自个儿来决定是还是不是要调用下贰此中间件。

分分快三计划 43

2017-10-10-21-47-00

先决条件

做到此模块须求以下内容:

  • Visual Studio Community 二零一六或更加高版本
  • ASP.NET Core 1.0

分分快三计划 44

  • 1. ASP.NET Core中间件详解
    • 1.1. 中间件原理
      • 1.1.1. 什么样是中间件
      • 1.1.2. 中间件实践进度
      • 1.1.3. 中间件的安顿
    • 1.2. 依据注入中间件
    • 1.3. Cookies和session中间件
      • 1.3.1. Session
      • 1.3.2. Session保存到Redis中
      • 1.3.3. 兑现布满Session
    • 1.4. 总结

任务1 - ASP.NET Identity简介

在这里职务中,您将领会ASP.NET Core项目模板怎么着使用ASP.NET Identity增加注册,登陆和撤废客商的作用。

  1. 打开Visual Studio 2015并选择文件| 新| 项目...创制一个新的缓和方案。

  2. 在“新建项目”对话框中,选取Visual C#|下的ASP.NET Web应用程序 Web选项卡,并保险选用.NET Framework 4.6。 将品种命名字为MyWebApp,选用五个地方,然后单击分明。

分分快三计划 45

开创新的ASP.NET Web应用程序项目

  1. 在“新建ASP.NET项目”对话框中,采用ASP.NET 5模板下的Web应用程序模板。 别的,请确定保证“身份验证”选项设置为“个人顾客帐户”。 单击“确定”继续。

分分快三计划 46

选取Web应用程序模板成立新类型

4. 体系开创后,打开project.json文本并找到Microsoft.AspNet.Identity.EntityFramework软件包。 此包全数实体框架完成的ASP.NET Identity,将持久化ASP.NET身份数据和形式到SQL Server。

分分快三计划 47

Microsoft.AspNet.Identity.EntityFramework包

  1. 开展应用方案能源管理器中的References节点,然后进行DNX 4.5.第11中学的Microsoft.AspNet.Identity.EntityFramework包。 注意,它决计于Microsoft.AspNet.Identity,它是ASP.NET Identity系统的要紧参照汇编。 此程序集带有ASP.NET Identity的骨干接口集。

分分快三计划 48

Microsoft.AspNet.Identity.EntityFramework包依赖项

  1. 开垦Startup.cs文件并找到ConfigureServices办法。 在那格局中,身份服务由以下代码配置。

分分快三计划 49

public void ConfigureServices(IServiceCollection services)
{
     // ...

     services.AddIdentity<ApplicationUser, IdentityRole>()
          .AddEntityFrameworkStores<ApplicationDbContext>()
          .AddDefaultTokenProviders();

     // ...
}

分分快三计划 50

7. 在平等文件中,找到在运转实践流程中调用ConfigureServices办法后调用的Configure措施。 在这里方法中,当调用UseIdentity方法时,将为应用程序启用ASP.NET Identity。 那会向央求管道增添基于Cookie的身份验证。

分分快三计划 51

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
     // ...

     app.UseIdentity();

     // ...
}

分分快三计划 52

8. 展开放在Controllers文本夹的AccountController.cs文本,并找到具备HttpPost属性的Register操作。 此操作调用UserManager服务依据RegisterViewModel音讯创造和登陆客户。

分分快三计划 53

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            // ...

            await _signInManager.SignInAsync(user, isPersistent: false);

            // ...

分分快三计划 54

  1. 使用HttpPost品质找到Login操作。 此操作使用SignInManager服务的PasswordSignInAsync主意对顾客展开签约。

分分快三计划 55

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
        if (result.Succeeded)
        {
            // ...

分分快三计划 56

  1. 现在,找到LogOff操作。 此操作调用SignInManager服务的SignOutAsync方法,清除存款和储蓄在Cookie中的顾客注明。

分分快三计划 57

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> LogOff()
{
    await _signInManager.SignOutAsync();
    _logger.LogInformation(4, "User logged out.");
    return RedirectToAction(nameof(HomeController.Index), "Home");
}

分分快三计划 58

  1. 运行施工方案并由此单击注册以查看ASP.NET Identity系统的操作来创造新客户。 您能够调治AccountController中的区别操作。

分分快三计划 59

帐户注册视图

  1. 注册第二个顾客后,您会看见一条错误消息,提醒您使用现成迁移。 单击应用迁移。 您现在将见到你以新客商地点登入。

  2. 终止应用程序并浏览数据库,方法是导航到SQL Server对象能源管理器视图中的(localdb)MSSQLLocalDB / Databases / aspnet5-MyWebApp- / Tables。 右键单击dbo.AspNetUsers表并选择“查阅数据”以查看创设的顾客的习性。

分分快三计划 60

在SQL Server对象能源管理器中查看客商数据

分分快三计划 61

1.4. 总结

本节教学了中间件的运作规律及配置进程,中间件之间对象注重关系的安顿和平日项目中常用到Session的计划问题。并在其实代码呈现了什么利用中间件完毕布满式Session。

转发表明出处 http://www.xdpie.com/2017/11/02/asp-net-core-distributed-session/

练习

此模块富含以下演习:

  1. 运用静态文件
  2. 路由和MVC简介
  3. 构建中间件类
  4. 向Web应用程序加多身份验证

评估价值完结此模块的时刻:60分钟

注意:首次运维Visual Studio时,必得挑选四个预订义的设置集结。 每一个预约义集结意在协作特定的费用样式,并规定窗口布局,编辑器行为,智能感知代码片段和对话框选项。 本模块中的进度描述了在运用“常规开采设置”集适那时候候,在Visual Studio中达成给定职务所需的操作。 倘使为耗费条件采用分裂的安装会集,那么你应该思索的步骤也许会有所不相同。

  1. 引进安装Nuget包 "Essensoft.AspNetCore.Payment.Alipay". 目前(2018/03/29)版本为 1.2.1

1.3.1. Session

HTTP是贰个无状态左券,Web服务器将每三个央浼都视为独立央求。况兼不保留从前央求中客户的值。

Session 状态是ASP.NET Core提供的一个效应,它能够在客户通应用访谈网络服务器的时候保存和存款和储蓄客户数据。由服务器上的字典和散列表组成,Session状态通过浏览器的乞求中拿走,Session的数量保存到缓存中。

ASP.NET Core通过包括Session ID的Cookie来维护会话状态,种种伏乞都会引导此Session ID。

Microsoft.AspNetCore.Session包中提供的中间件用来处理Session状态。要启用Session中间件,Startup类里面须要做以下多少个操作:

  • 使用别的贰个兑现了IDistributedCache接口的劳动来启用内部存款和储蓄器缓存,
  • 设置AddSession回调,由于AddSession是在Microsoft.AspNetCore.Session包内完成的,所以必须在Nuget中增加Microsoft.AspNetCore.Session
  • UseSession回调

切切实实示例代码如下:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // 添加一个内存缓存
        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            // 设置10秒钟Session过期来测试
            options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.HttpOnly = true;
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseSession();
        app.UseMvcWithDefaultRoute();
    }
}

地点代码中IdleTimeout属性用来规定客商多长期未有操作时抛弃Session。此属性和Cookie超时毫不相关,通过Session中间件的各类央求都会复位超时时间。

概述

前边写过一篇有关《ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简要介绍》的小说,主要介绍了ASP.NET Core中StaticFile、Middleware、CustomizeMiddleware和Asp.NetCore Identity。不过由于具有的ASP.NET Core的本子有些老,所以,本次重写二遍。使用新型的ASP.NET Core 1.1本子。对于ASP.NET Core 1.1 Preview 1会在之后的稿子中介绍

代码:

1.2. 依附注入中间件

在实际上项目中,中间件往往须要调用另外对象的情势。所以要创设对象之间的正视,由于ASP.NET Core 内置的信赖注入系统,写程序的时候能够创造更温婉的代码。

率先须求要在IOC容器中注册类,正是Startup类中的ConfigureServices方法中举办登记,ConfigureServices方法会在Configure艺术此前被实行。以便在用中间件时有所正视都计划好了。

现行反革命有一个Greeter类:

public class Greeter : IGreeter
{
    public string Greet()
    {
        return "Hello from Greeter!";
    }
}

public interface IGreeter
{
    string Greet();
}

率先步在ConfigureServices格局中展开挂号

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IGreeter, Greeter>();
}

我这里运用的是AddTransient实行注册,该方法在每一遍央求时创制该类的新实例。能够挑选别的方法:AddSingleton,AddScoped或简捷的Add(全体在悄悄前应用)。整个DI系统在法定文书档案中有所描述。

在登记了依据项后,就足以选择它们了。IApplicationBuilder实例允许在Configure办法中有三个RequestServices属性用于获取Greeter实例。由于已经登记了那几个IGreeter接口,所以无需将中间件与具象的Greeter达成相结合。

app.Use(async (ctx, next) =>
    {
        IGreeter greeter = ctx.RequestServices.GetService<IGreeter>();
        await ctx.Response.WriteAsync(greeter.Greet());
        await next();
    });

如果Greeter类有三个参数化的构造函数,它的正视性关系也必需在其间注册ConfigureServices

中间件可以很轻便消除信任关系。能够向中间件构造函数增加任何参数:

public class MyMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IGreeter _greeter;

    public MyMiddleware(RequestDelegate next, IGreeter greeter)
    {
        _next = next;
        greeter = greeter;
    }

    public async Task Invoke(HttpContext context)
    {
        await context.Response.WriteAsync(_greeter.Greet());
        await _next(context);
    }
}

也许,能够将此信赖关系增加到Invoke方法中:

public async Task Invoke(HttpContext context, IGreeter greeter)
{
    await context.Response.WriteAsync(greeter.Greet());
    await _next(context);
}

一旦DI系统通晓那一个参数的类型,则在类被实例化时,它们将被机关深入分析。很简短!

任务2 - 使用外界提供程序启用身份验证

ASP.NET Core协助使用OAuth 2.0施用来源外界认证提供程序(如推特,Instagram,LinkedIn,Microsoft或Google)的凭据登入。 在您的网址中启用社交登入凭据提供了显着的优势,因为数百万客商已经颇有那个外界提供商的帐户。 若是他们不必创设和铭记一组新的凭证,那几个客商只怕更赞成于注册您的网址。

在那职务中,您将创建一个推特(Twitter)应用程序并布署您的Web应用程序项目(须要翻个墙),以使顾客能够利用其Instagram(脸谱)帐户作为外界提供商登入。

1. 在浏览器中,导航到,然后通过输入您的推特(Twitter)(TWT奥德赛.US)凭据登入。倘令你未有注册为推文(Tweet)(TWTCR-V.US)开荒职员,请单击注册为开垦职员,并依据表明注册。

2. 在Instagram的开辟职员主页上,通过单击加多新应用程序并从阳台选用中选择网址加多新的应用程序。

  1. 在“网址神速入门”页面上,采纳“跳过并创立应用程序ID”。

4. 安装展现名称,比方ASP.NET社交登入,并选择项目,举例业务,然后按成立应用程序ID。

  1. 在设置页面包车型客车为主部分中,单击增加平台以钦点要加多网址应用程序。

  2. 从平台选取中挑选网址,加多您的网址网站(比如https:// localhost:44300 /),然后点击上边包车型地铁保存更动。

7. 记下您的应用程序ID和应用程序密钥,以便你以后能够将它们增加到您的ASP.NET核心网址。

  1. 切换回Visual Studio,右键单击MyWebApp项目并接纳管理客商秘密。

分分快三计划 62

选料管理顾客秘密

9.  在secrets.json文件中增加以下代码,将占位符替换为从Twitter获取的值。

分分快三计划 63

{
  "Authentication": {
     "Facebook": {
        "AppId": "<your-app-id>",
        "AppSecret": "<your-app-secret>"
     }
  }
}

分分快三计划 64

10. 张开project.json文件并增添Microsoft.AspNet.Authentication.推特包作为依据关系

"dependencies": {
      ...
      "Microsoft.AspNet.Authentication.Facebook":  "1.0.0-rc1-final"
},

11. 展开startup.cs文件,并在Configure方法中加多推文(Tweet)中间件,如以下代码段所示。

分分快三计划 65

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // ...

    app.UseIdentity();

    app.UseFacebookAuthentication(options =>
    {
        options.AppId = Configuration["Authentication:Facebook:AppId"];
        options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    });

    // ...
}

分分快三计划 66

  1. 运营应用程序并导航到登陆页面,您将见到照片墙按键。

分分快三计划 67

动用Instagram(TWTTiggo.US)按键登入页面

源码下载地址:

分分快三计划 68

目录

  • 运用静态文件
  • 采取路由
  • 编纂自定义中间件
  • 向Web应用程序增多身份验证

分分快三计划 69

任务1 - 添加MVC

ASP.NET MVC为你提供了一个精锐的,基于格局的法子来创设动态网址,使清晰分离的标题,并让您完全调控标志的开心,敏捷开辟。 ASP.NET MVC包蕴广大功力,成立使用最新的Web标准的纷纷应用程序。

在那职责中,您将铺排项目以应用ASP.NET MVC并配备示例路由。

1. 打开project.json文本并将Microsoft.AspNet.Mvc添加到依据于关系部分。并添加runtimes节点,有限支撑健康运营

分分快三计划 70

"dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",

"Microsoft.AspNetCore.Mvc": "1.1.0"

,
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0"
  },

分分快三计划 71

分分快三计划 72

//添加运行环境的系统变量
  //当前系统环境为win10-x64
  //对于.NETCore包后报错,需要根据系统环境进行修改
  //可选环境包括:win10-x64, win81-x64, win8-x64, win7-x64
  "runtimes": {
    "win10-x64": {}
  },

分分快三计划 73

2. 在斩草除根方案能源管理器中,右键单击Asp.NET_Core_TEST品类,然后选用加上| 新文件夹,并将文件夹命名称为Controllers

  1. 右键单击新文件夹,然后选拔添加| 新项目...,分选MVC调节器类,命名文件HomeController.cs并单击加多。

  2. 应用以下代码段替换文件的开始和结果。

分分快三计划 74

namespace Asp.NET_Core_TEST.Controllers
{
    public class HomeController : Controller
    {
        // GET: /<controller>/
        [HttpGet]
        public string Index()
        {
            return "Hello form MVC HomeController";
        }
    }
}

分分快三计划 75

5. 现在,打开Startup.cs文件,将MVC服务和中间件增添到配置中,增多services.AddMvc()并使用UseMvc办法替换Configure主意中的app.Run艺术调用,如上面包车型地铁代码片段所示。

分分快三计划 76

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    //添加静态文件支持管道
    app.UseStaticFiles();

    //添加静态文件和默认文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();

    //配置AspNetCore.MVC的路由

app.UseMvc(routes =>

    {
        routes.MapRoute(
            name: 

"default", template: "{controller=Home}/{action=Index}/{id?}"

);
    });
    //该管道可代替上面的默认路由,如果需要其余配置,可以通过上面的方式手工编写
    app.UseMvcWithDefaultRoute();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

分分快三计划 77

  1. 运维网址并经过导航到/ home端点验证从MVC调整器再次回到的音讯。

在乎:ASP.NET Core MVC还富含多个低价的新实用程序方法,app.UseMvcWithDefaultRoute,由此你不用记住模板字符串。

 

 达成页面如下:

职务3 - 向中间件增添选项

在那任务中,您将履新RequestCultureMiddleware落到实处以协理将暗许文化设置为配置值。

  1. 右键单击MiddlewareApp项目并精选添加| 类...,将文件命名叫RequestCultureOptions.cs,然后单击增添。

2. 在新类中,将具备CultureInfo的名为DefaultCulture的习性加多为项目,解析错过的依赖关系。

public class RequestCultureOptions
{
    public CultureInfo DefaultCulture { get; set; }
}

3. 打开RequestCultureMiddleware.cs文件,并更新RequestCultureMiddleware构造函数以接受RequestCultureOptions参数,如以下代码段所示。

分分快三计划 78

public class RequestCultureMiddleware
{
    private readonly RequestDelegate next;
    private readonly RequestCultureOptions options;

    public RequestCultureMiddleware(RequestDelegate next, RequestCultureOptions options)
    {
        this.next = next;
        this.options = options;
    }

    //...
}

分分快三计划 79

4. 借使在询问字符串中未钦命任何内容,请更新中间件的Invoke方法以使用采纳中的DefaultCulture品质,如以下代码段所示。

分分快三计划 80

public Task Invoke(HttpContext context)
{
    CultureInfo requestCulture = null;

    var cultureQuery = context.Request.Query["culture"];
    if (!string.IsNullOrWhiteSpace(cultureQuery))
    {
        requestCulture = new CultureInfo(cultureQuery);
    }
    else
    {
        requestCulture = this.options.DefaultCulture;
    }

    if (requestCulture != null)
    {
#if !DNXCORE50
        Thread.CurrentThread.CurrentCulture = requestCulture;
        Thread.CurrentThread.CurrentUICulture = requestCulture;
#else
        CultureInfo.CurrentCulture = requestCulture;
        CultureInfo.CurrentUICulture = requestCulture;
#endif
    }

    return this.next(context);
}

分分快三计划 81

5. 在长久以来文件中,使用以下代码片段替换RequestCultureMiddlewareExtensions类完结,该代码片段向利用RequestCultureOptionsUseRequestCulture艺术增添了二个重载,并将它们传递到UseMiddleware <RequestCultureMiddleware>调用中。

分分快三计划 82

public static class RequestCultureMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestCultureMiddleware>();
    }
    public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder, RequestCultureOptions options)
    {
        return builder.UseMiddleware<RequestCultureMiddleware>(options);
    }
}

分分快三计划 83

6. 打开Startup.cs文本,并将配备格局中的后备文化设置为有个别暗许值,比方。 “zh-cn”。

app.UseRequestCulture(new RequestCultureOptions
{
     DefaultCulture = new CultureInfo("zh-cn")
});
  1. 运作应用程序,并证实当未有一点点名询问字符串时,暗许文化与布置的同盟。

 

 

分分快三计划 84

演练4:向Web应用程序增多身份验证

ASP.NET Identity是多少个成员身价系统,它同意你向应用程序增多登陆成效。 客商能够使用客商名和密码创立帐户和登入,也足以应用Instagram,Google,Microsoft帐户,推特(TWTR.US)等外界登陆提供程序。

在本演练中,您将明白使用ASP.NET Identity的ASP.NET Core项目模板的暗中同意配置,以至将Instagram配置为应用程序中的外界登入提供程序。

代码:

练习2:路由和MVC简介

路由是光彩夺目各处理程序的U哈弗L情势。 管理程序能够是轮廓文件,比方Web Forms应用程序中的.aspx文件。 管理程序也得以是管理诉求的类,举例MVC应用程序中的调整器。

ASP.NET路由让你能够使用不必映射到网址中一定文件的U奥迪Q3L。 由于网站不必映射到文件,因此你能够动用描述客商操作的网站,因而客商更便于领悟。

在本练习中,您将驾驭哪些在应用程序中安顿路由。

 5. 修改 Views/Home/Index 页面,用于网址提交支付须求.

职务4 - 从文件读取央浼文化安排

ASP.NET Core的配备连串现已从当中期版本的ASP.NET重新营造,前者信赖于System.Configuration和XML配置文件,如web.config。 新的布置模型提供了足以从各样提供程序检索的依附键/值的装置的简化访谈。 然后,应用程序和框架能够动用新的选项方式访谈已布局的安装。

在这里职务中,您将选用从JSON文件加载RequestCultureOptions的暗中认可文化值的新布局体系。

 

1. 打开Startup.cs文件并丰裕八个名称为布局项目IConfiguration的新的私人商品房类字段,深入分析IConfiguration的错失信任关系。

分分快三计划 85

public class Startup
{
    private readonly IConfiguration configuration;

    // ...
}

分分快三计划 86

2. 加多一个新的构造函数,使用ConfigurationBuilder在构造函数中创立一个新的Configuration目的,并将其分配给你在上一步中创立的布局类字段。

分分快三计划 87

public Startup()
{
    var configuration = new ConfigurationBuilder()
        .Build();

    this.configuration = configuration;
}

分分快三计划 88

3. 打开project.json文本,并在依据关系节点中增多对Microsoft.Extensions.Configuration.Json包的引用。也得以因此Nuget援用。

分分快三计划 89

"dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0",
    "MiddlewareApp": "1.0.0-*"
  },

分分快三计划 90

Nuget引用

分分快三计划 91

4. 回到Startup.cs文本中,在作为链接方法创造ConfigurationBuilder目标之后立时增添对.AddJsonFile(“config.json”)的调用。

分分快三计划 92

private readonly IConfiguration configuration;
public Startup(IHostingEnvironment env)
{
    var configuration = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)  //设置程序路径为根路径
        .AddJsonFile("config.json")
        .Build();

    this.configuration = configuration;
}

分分快三计划 93

  1. 右键单击MiddlewareApp项目并精选加多| 新建项目...,选拔JSON文件作为模板,将文件命名叫config.json,然后单击加多。

6. 在新的config.json文件中,加多一个新的键/值对“culture”:“zh-cn”。

{
  "culture": "zh-cn"
}
  1. 开荒Startup.cs文件并立异代码以应用新的配备系列装置默许文化。

    app.UseRequestCulture(new RequestCultureOptions {

      DefaultCulture = new CultureInfo(this.configuration["culture"] ?? "zh-cn")
    

    });

  2. 运营应用程序并表明暗中认可文化是铺排文件中布署的文件。

9. 在config.json文件少校文化值更新为“zh”,并刷新页面(不更改任何此外代码)。 请注意,音讯未变动,因为仅在应用程序运行时读取配置。

  1. 回到Visual Studio并按Ctrl Shift F5再也启航Web服务器。

  2. 归来浏览器并刷新页面; 它应有出示更新的新闻。

 

分分快三计划 94

职务1 - 编写一个依据查询字符串值设置当前知识的中等件类

中间件是组装到应用程序管道中以管理央浼和响应的组件。 每种组件能够采取是还是不是将呼吁传递到管道中的下多个零部件,而且能够在管道中的下八个零件以前和事后施行某个操作。 必要代理用于营造此恳请管道,然后用于拍卖对应用程序的每种HTTP央求。

伸手代理使用传递到运转类中的配置格局的IApplicationBuilder类型上的Run(运行),Map(映射)和Use(使用)扩展方法开展配置。 单个诉求委托能够当做匿有名的模特式在线钦命,也得以在可选取类中定义。 这个可选拔的类是中间件或中间件组件。 诉求管道中的每个中间件组件肩负调用链中的下二个组件,恐怕只要合适,选拔将链短路。

在这里职责中,您将成立内联合中学间件。

1. 在事先的Asp.NET_Core_TEST焚薮而田方案基础上,为src文件夹增添叁个新的类别,选择.NET Core中的Class Library(.NET Core),并取名叫MiddlewareApp,单击明确。

分分快三计划 95

2. 打开Asp.NET_Core_Test下的Startup.cs文本,并动用以下代码片段替换Configure措施的内容,该代码片段创设在静态文件管道代理以前运转的内联合中学间件,代理为查询字符串中的当前呼吁设置文化。

分分快三计划 96

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.Use((context, next) 

=>

    {

var cultureQuery = context.Request.Query["culture"]; if (!string.IsNullOrWhiteSpace(cultureQuery)) {var culture = new CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture = culture; } // Call the next delegate/middleware in the pipeline returnnext(); }); app.Run(async (context) =>

    {

await context.Response.WriteAsync($"Hello {CultureInfo.CurrentCulture.DisplayName}"

);
    });

    //添加静态文件支持管道
    app.UseStaticFiles();

    //添加静态文件和默认文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();

    //配置AspNetCore.MVC的路由
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    //该管道可代替上面的默认路由,如果需要其余配置,可以通过上面的方式手工编写
    app.UseMvcWithDefaultRoute();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

分分快三计划 97

 

  1. 解决遗失的using语句。

分分快三计划 98

  1. 运转应用程序。 要在操作中查看中间件,请通过充分文化询问字符串来安装文化,举例 **

分分快三计划 99

分分快三计划 100

 

 

那篇小说将介绍ASP.NET Core中选择开源项目 Payment,完成对接支付宝-Computer网页支付接口及协助举行跳转及异步公告成效。

任务2 - 增添私下认可文书档案扶持

为了令你的Web应用程序提供默许页面,而客商不须要完全限定UEnclaveI,就能够利用UseDefaultFiles扩大方法。 此方法是实际不提供文件的U讴歌ZDXL重写程序。

除了UseStaticFilesUseDefaultFiles强大方法之外,还会有多少个格局- UseFileServer - 组合这两种情势的效果与利益以致UseDirectoryBrowser推而广之方法。

在此职分中,您将采纳UseFileServer启用服务静态和暗中同意文件。

1. 打开Startup.cs文件,将Configure方法中的静态文件中间件从app.UseStaticFiles()更改为app.UseFileServer()。

分分快三计划 101

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole();
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    //添加静态文件支持管道
     app.UseStaticFiles();
    //添加静态文件和默认文件的支持
    //可代替app.UseStaticFiles();
    app.UseFileServer();
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

分分快三计划 102

  1. 再次运维应用程序。 导航到网址根目录时,应展现暗中认可页面index.html

 

分分快三计划 103

  1. 加多二个调整器, 笔者将其取名叫 AlipayController.cs

分分快三计划 104

 1 @{
 2     ViewData["Title"] = "Home Page";
 3 }
 4 
 5 <div style="padding:24px 0">
 6     <h3>支付宝 电脑网站支付 - <a href="https://docs.open.alipay.com/270/alipay.trade.page.pay" target="_blank">API文档</a></h3>
 7     <hr />
 8     <form asp-controller="Alipay" asp-action="PagePay" target="_blank">
 9         <div class="form-group">
10             <label>body:</label>
11             <input type="text" class="form-control" name="body" value="支付宝网站支付测试详情">
12         </div>
13         <div class="form-group">
14             <label>subject:</label>
15             <input type="text" class="form-control" name="subject" value="支付宝网站支付测试">
16         </div>
17         <div class="form-group">
18             <label>total_amount:</label>
19             <input type="text" class="form-control" name="total_amount" value="0.01">
20         </div>
21         <div class="form-group">
22             <label>out_trade_no:</label>
23             <input type="text" class="form-control" name="out_trade_no" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
24         </div>
25         <div class="form-group">
26             <label>product_code:</label>
27             <input type="text" class="form-control" name="product_code" value="FAST_INSTANT_TRADE_PAY">
28         </div>
29         <div class="form-group">
30             <label>notify_url(通知Url需外网环境可访问):</label>
31             <input type="text" class="form-control" name="notify_url" value="http://xxx.com/alipay/pagepaynotify">
32         </div>
33         <div class="form-group">
34             <label>return_url:</label>
35             <input type="text" class="form-control" name="return_url" value="http://xxx.com/alipay/pagepayreturn">
36         </div>
37         <button type="submit" class="btn btn-primary">提交</button>
38     </form>
39 </div>

本篇小提起此甘休,具体功能可活动测量试验。谢谢各位观看。

分分快三计划 105

转自:

1.新建"ASP.NET Core Web 应用程序"项目,小编将它命名字为Alipay萨姆ple.

分分快三计划 106

 1         public void ConfigureServices(IServiceCollection services)
 2         {
 3             services.AddMvc();
 4 
 5             // 添加支付宝客户端依赖注入
 6             services.AddAlipay();
 7 
 8             // 可在添加依赖注入时设置参数 一般设置 AppId、RsaPrivateKey、RsaPublicKey,其余默认即可.
 9             // 如:
10             //services.AddAlipay(opt =>
11             //{
12             //    //此处为蚂蚁金服开放平台上创建的APPID,而非老版本的商户号
13             //    opt.AppId = "";
14 
15             //    // 这里的公私钥 默认均为支付宝官方推荐使用的RSAWithSHA256.
16             //    // 商户私钥
17             //    opt.RsaPrivateKey = "";
18             //    // 支付宝公钥
19             //    opt.RsaPublicKey = "";
20             //});
21 
22             // 具体参数见 AlipayOptions
23 
24             // 注册配置实例
25             services.Configure<AlipayOptions>(Configuration.GetSection("Alipay"));
26 
27             // 两种方式设置注册配置实例参数
28 
29             // 1.默认配置文件(开发环境/正式环境):
30             // appsettings.Development.json / appsettings.json
31 
32             // 2.用户机密配置文件(VS2017 15.6.4 中,右键项目 => 管理用户机密):
33             // Windows: % APPDATA %microsoftUserSecrets< userSecretsId >secrets.json
34             // Linux: ~/.microsoft / usersecrets /< userSecretsId >/ secrets.json
35             // macOS: ~/.microsoft / usersecrets /< userSecretsId >/ secrets.json
36 
37             // 配置文件内容如下('...'为省略的项目其他配置内容,若有的情况下 -_-!):
38 
39             //{
40             // ...
41             // ...
42             //
43             //  "Alipay": {
44             //    "AppId": "",
45             //    "RsaPublicKey": "",
46             //    "RsaPrivateKey": ""
47             //  }
48             //}
49         }

分分快三计划 107

代码:

  1. 在Startup.cs文件内 增添信赖注入、设置参数(蚂蚁金服开放平台 - 账户管理 - 密钥管理 - 开放平台密钥)

分分快三计划 108

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 .Net Core