HTML5技术

通过几个Hello World感受.NET Core全新的开发体验 - Artech(2)

字号+ 作者:H5之家 来源:博客园 2016-07-01 18:00 我要评论( )

ASP.NET Core应用的背后是一个由Server和Middleware构成的管道,Server实现针对请求的监听、接收和响应,而注册的Middleware则负责对请求进行处理。WebHostBuilder的UseKestrel方法为管道注册了必不可少Server,Mid

ASP.NET Core应用的背后是一个由Server和Middleware构成的管道,Server实现针对请求的监听、接收和响应,而注册的Middleware则负责对请求进行处理。WebHostBuilder的UseKestrel方法为管道注册了必不可少Server,Middleware的注册在实现在由UseStartup方法注册的启动类型中。如下所示的是我们注册的Startup类型的定义,我们在Configure方法中调用ApplicationBuilder的扩展方法Run注册了唯一的Middleware,它对请求的处理逻辑简单而直接——直接响应一个“Hello World”字符串。

Microsoft.AspNetCore.Hosting;Microsoft.AspNetCore.Http;StartupConfigure(IApplicationBuilder app) 11: { 12: app.Run(context=>context.Response.WriteAsync("Hello World")); 13: 14: } 15: 16: } 17: }

我们同样按照上面的方式执行dotnet restore和dotnet run命令,ASP.NET Core应用将被启动。

image

上控制台上的输出我们可以看出,ASP.NET Core启动后会绑定到默认的地址“:5000/”来监听请求,所以我们可以利用浏览器向这个地址发送请求,应用处理请求后会按照如下的形式响应由注册的Middleware写入的“Hello World”。

image

四、自行指定监听地址

我们在利用WebHostBuilder创建WebHost,以及利用后者启动ASP.NET Core应用的整个过程中并没有显式指定Server监听的地址,在此情况下默认的监听地址“:5000/”会被使用。我们也可以自行指定这个监听地址,该地址可以通过调用WebHostBuilder的扩展方法UseUrls来指定。如下面的代码片段所示,我们在利用WebHostBuilder创建WebHost之前调用UseUrls方法注册了两个监听地址“:8888/“和“:9999/”。源代码下载:netcore.helloworld3

Microsoft.AspNetCore.Hosting;Microsoft.AspNetCore.Http;ProgramMain(string[] args) 11: { 12: new WebHostBuilder() 13: .UseKestrel() 14: .UseStartup<Startup>() 15: .UseUrls("http://localhost:8888/", "http://localhost:9999/") 16: .Build() 17: .Run(); 18: } 19: } 20: }

当应用再次被启动后,监听地址将发生改变,我们可以改变浏览器的目标地址来对此做验证。

image

五、将应用修改成一个ASP.NET Core MVC应用

我们继续对上面这个ASP.NET Core应用进行改造,并将其构建成一个MVC应用。建立在ASP.NET Core的所有的开发框架都是通过注册到管道中的某一个或者多个Middleware实现的。针对MVC的Middleware实现了路由、Controller的激活、Action方法的执行以及View的呈现。相关的类型通过“Microsoft.AspNetCore.Mvc”这个NuGet包承载,所以我们需要添加这个NuGet包的依赖。简单起见,我们只需要直接将project.json中添加的“Microsoft.AspNetCore.Hosting”替换成“Microsoft.AspNetCore.Mvc”即可。

: {: :: {: {: : "dnxcore50" 20: } 21: } 22: }

ASP.NET Core MVC相关Middleware的注册同样实现在Startup类型的Configure方法中。如下面的代码片段所示,我们直接调用ApplicationBuilder的扩展方法UseMvc注册了这个Middleware。由于这个Middleware需要使用到相关的服务,所以我们在另一个名为ConfigureServices的方法中通过调用ServiceCollection的扩展方法AddMvc注册了这些服务。

Microsoft.AspNetCore.Builder;Microsoft.Extensions.DependencyInjection;StartupConfigureServices(IServiceCollection services)Configure(IApplicationBuilder app) 16: { 17: app.UseMvc(); 18: } 19: } 20: }

对于一个MVC应用来说,任意一个请求都是指向定义在目标Controller的某个Action方法中,接下来我们就来定义如下一个HomeController。ASP.NET Core MVC不像之前的MVC版本要求Controller实现IController接口,它可以是一个普通一个以Controller为后缀命名的公共类型。我们在HomeController中定义的Action方法Index,该方法上应用HttpGetAttribute以特性注入的形式注册了模板为“/{name}”的路由。

Microsoft.AspNetCore.Mvc;HomeControllerIndex(string name) 10: { 11: return $"Hello {name}"; 12: } 13: } 14: }

当我们按照上面的方式启动这个ASP.NET Core MVC应用后,如果我们利用浏览器访问与注册路由相匹配的目标地址(“:9999/foobar”),可以得到如下所示的相应结果。源代码下载:netcore.helloworld4

image

六、添加View

接下来我们为上面这个MVC应用添加View。为此我们需要按照如下的方式改写HomeController。我们让它继承基类Controller,并改变Action方法Index的返回类型(IActionResult),该方法直接调用View方法返回只想默认View的ViewResult对象。再次之前,我们将传入的参数name保存在ViewBag中。

ConsoleApplicationHomeController: ControllerView(); 12: } 13: } 14: }

接下来我们来定义Action方法Index指向的这个View,按照约定我们应该将对应的Index.cshtml文件存放在/Views/Home目录下。该View定义如下。

HelloHello, @ViewBag.Name

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ABP入门系列(16)——通过webapi与系统进行交互 - 『圣杰』

    ABP入门系列(16)——通过webapi与系统进行交互 - 『圣杰』

    2017-04-25 09:04

  • 聊聊这几个星期的面试感受吧,内容太长。。慢慢更新吧 - 秦随境迁

    聊聊这几个星期的面试感受吧,内容太长。。慢慢更新吧 - 秦随境迁

    2017-04-13 13:03

  • 有个程序猿要去当CEO了:(一)事情始末 - Hello森林木

    有个程序猿要去当CEO了:(一)事情始末 - Hello森林木

    2017-03-19 10:00

  • HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试 - 敢言

    HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试 - 敢言

    2017-02-20 12:00

网友点评
%