本文章主要说明asp.net core的创建和简单使用。

一、使用到的命令

  • dotnet new :创建项目(解决方案,类库,单元测试等),如:dotnet new web
  • dotnet add package 添加一个nuget的引用
  • dotnet test:运行测试
  • dotnet build:编译项目
  • dotnet sln add:将项目添加到解决方案
  • dotnet add reference:对此项目添加项目引用

二、建立空项目

  • 在测试目录下运行 dotnet new web -n baseWeb,创建web项目,结果如下图所示:
  • 运行 dotnet run,即可运行此项目,此命令内部会执行dotnet build命令编译项目,然后运行,结果如下:

  • 说明:此命令是在sln(解决方案)文件所在目录运行的,所以增加了-p参数,用于指定启动指定的项目。

三、引入mvc

  • 由于我们创建是一个空web项目,是没有mvc相关依赖包的,所以首先需要运行dotnet add package Microsoft.AspNet.Mvc 进行依赖包的安装
  • 然后在StartUp类的ConfigureServices方法中添加如下代码:
public void ConfigureServices(IServiceCollection service){
service.AddMvc();
service.AddRouting();
}

上述添加此添加了Mvc,也添加了路由

  • 配置路由,还是在StartUp类中,其方法为Configure添加如下代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} //添加的代码
app.UseMvc(routers=>{
routers.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
}); app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
  • 对controller和view的创建
    在创建controller时,没有找到完全好的 命令创建方法,所以使用的是手动创建文件,然后继承Controller类实现;而view是可以通过dotnet new page实现的,但也可以使用手动创建。文件结果如下:
  • 执行dotnet run运行,然后网页访问对就的地址即可

四、更换依赖注入为autofac

aspnet core是自带了依赖注入功能的,就是StartUp类中ConfigureServices方法的IServiceCollection类型的形参。如果你想替换为autofac。请参考如下步骤

  • 安装autofac,以及acutofac的扩展类

    • Autofac
    • Autofac.Extensions.DependencyInjection
  • 更改StartUp类中的configureSeervices方法
public IServiceProvider ConfigureServices(IServiceCollection service){
service.AddMvc();
service.AddRouting();
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(service);
containerBuilder.RegisterType<Services.ProductService>().As<Services.IProductService>();
var container = containerBuilder.Build();
return new AutofacServiceProvider(container);
}
  • 其中,我们更改了ConfigureServices方法的返回值,由void换成IServiceProvider;此返回为AutofacServiceProvider类的一个实例;在上述过程中,使用了continerBuilder.Populate方法将service(IServiceCollection的实例对象)注入到autofac中。
  • 其中为了测试DI能力,我们创建一个IProductService的注入,并在Controller中使用,相关代码如下:
    • IProductService
namespace baseWeb.Services
{
public interface IProductService
{
int Get(int id);
}
}
  • ProductService
using System.Collections.Generic;

namespace baseWeb.Services
{
public class ProductService:IProductService
{
List<int> ls = new List<int>(); public ProductService(){
for(var i=; i<; i++){
ls.Add(i+);
}
}
public int Get(int id){
return ls[id];
}
}
}
  • HomeController
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc; namespace baseWeb.Controllers
{
public class HomeController:Controller
{
private Services.IProductService productService; public HomeController(Services.IProductService productService){
this.productService = productService;
} public IActionResult Index(int id){
ViewData["value"] = this.productService.Get(id);
return View();
}
}
}
  • 运行结果如下:

五、加入单元测试

在实际开发中,经常需要用到单元测试。.net core的单元测试也是如此的 so easy, fallow me。

  • 运行dotnet new xunit -n baseWebTest,即可创建一个以xunit为测试框架的单元测试项目
  • 运行dotnet add package Moq,安装Moq模拟框架(此命令需要进入到baseWebTest项目文件夹后运行)
  • 运行dotnet add reference ../baseWeb/baseWeb.csproj,将baseWeb项目引入到此项目中。
  • 编写单元测试代码如下:
using System;
using Xunit;
using Moq;
using baseWeb.Controllers;
using baseWeb.Services;
using Microsoft.AspNetCore.Mvc; namespace basewebtest
{
public class DemoTest
{
[Fact]
public void Test1()
{
var productServiceMock = new Mock<IProductService>();
productServiceMock.Setup(service=>service.Get()).Returns((int id)=>{
return id+;
});
var _controller = new HomeController(productServiceMock.Object); var result = _controller.Index();
var objectResult = Assert.IsType<ViewResult>(result);
var destResult = Assert.IsAssignableFrom<int>(objectResult.ViewData["value"]);
Assert.Equal(, destResult);
}
}
}
  • 运行dotnet test -p ./baseWebtest/baseWebtest.csproj即可,看到如下结果:

六、其他

  • 如果你是使用vscode编写,那么测试项目是可以在编译器中进行运行和调试的
  • 下载测试源码

这样入门asp.net core,如何的更多相关文章

  1. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...

  2. 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何

    基于 Vue.js 之 iView UI 框架非工程化实践记要   像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...

  3. net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了   原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...

  4. 这样入门asp.net core 之 静态文件

    本文章主要说明asp.net core中静态资源处理方案: 一.静态文件服务 首先明确contentRoot和webroot这两个概念 contentRoot:web的项目文件夹,其中包含webroo ...

  5. 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

      命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...

  6. 观看杨老师(杨旭)Asp.Net Core MVC入门教程记录

    观看杨老师(杨旭)Asp.Net Core MVC入门教程记录 ASP.NET Core MVC入门 Asp.Net Core启动和配置 Program类,Main方法 Startup类 依赖注入,I ...

  7. 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发

    <ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...

  8. ASP.NET Core 中文文档 第二章 指南(3)用 Visual Studio 发布一个 Azure 云 Web 应用程序

    原文:Getting Started 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘).刘怡(AlexLEWIS).何镇汐 设置开发环境 安装最新版本的 Azure S ...

  9. ASP.NET Core 2.0 MVC项目实战

    一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还是 ...

随机推荐

  1. Linux常用命令(第二版) --帮助命令

    帮助命令 1.man[manual]: /usr/bin/man 获得命令或配置文件的帮助文档,优先查看命令的帮助 格式:man [命令或配置文件]  #会同时调用more E.g. man ls # ...

  2. 网站开发进阶(十)如何将一个html页面嵌套在另一个页面中

    如何将一个html页面嵌套在另一个页面中 1.IFrame引入 <IFRAME NAME="content_frame" width=100% height=30 margi ...

  3. 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目

    分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...

  4. 内核调试神器SystemTap — 简介与使用(一)

    a linux trace/probe tool. 官网:https://sourceware.org/systemtap/ 简介 SystemTap是我目前所知的最强大的内核调试工具,有些家伙甚至说 ...

  5. Jenkins hash

    最早,Bob Jenkins提出了多个基于字符串通用Hash算法(搜Jenkins Hash就知道了),而Thomas Wang在Jenkins的基础上,针对固定整数输入做了相应的Hash算法.其64 ...

  6. LeetCode(29)-Plus One

    题目: Given a non-negative number represented as an array of digits, plus one to the number. The digit ...

  7. ubuntu14.04下安装rubinius测试原生线程

    因为CRuby(MRI)本身不支持原生多线程,所以想试一下其他ruby解释器实现对原生多线程的支持.于是安装rubinius折腾一下:) 在rubinius官网下载2.4.1源代码,然后驾轻就熟首先b ...

  8. C# 如何将PDF转为多种图像文件格式(Png/Bmp/Emf/Tiff)

    PDF是一种在我们日常工作学习中最常用到的文档格式之一,但常常也会因为文档的不易编辑的特点,在遇到需要编辑PDF文档内容或者转换文件格式的情况时让人苦恼.通常对于开发者而言,可选择通过使用组件的方式来 ...

  9. Spring Boot 多模块与 Maven 私有仓库

    前言 系统复杂了,抽离单一职责的模块几乎是必须的:若需维护多个项目,抽离公用包上传私有仓库管理也几乎是必须的.其优点无需赘述,以下将记录操作过程. 1. 多模块拆分 在.NET 中由于其统一性,实现上 ...

  10. JAVA 综合面试题

    JAVA 综合面试题 2007-08-12 目录 TOC \o "1-3" \h \z \u Java面试题整理 9 Java面向对象 9 1. super()与this()的区别 ...