asp.net mvc core

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Fanbin168/article/details/81939518

Asp.net core的官方文档:https://docs.microsoft.com/en-us/aspnet/core/,部分文档有中文的:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/index

项目结构

wwwroot是静态文件的路径,静态文件都放这里
appsettings.json是默认的配置文件,相当于Web.config
Program.cs是程序的入口,相当于Global.asax
Startup.cs是项目初始化类

asp.net core两种运行方式:SelfHost及IIS集成,在VS中调试的时候也有这两种方式。推荐用SelfHost。

普通的.NetFramework项目程序,只能跑在IIS下(asp生命周期,IIS管道事件)
.NetFramework和IIS紧密的集成在一起,形成了你我不分的粘在了一起,这很恶心
你看asp.net内核一些类的时候,一些实现的时候,你可以看到它里面是直接调用了IIS的一些核心组件,这样做可能对当时来说是合适的,但是现在来说是不合适的。因为asp.net这个web开发的框架竟然与web服务器(IIS)耦合在一起,这是一件非常恶心的事情,这样带来最大的问题就是很难拆分,比如我就不想用IIS作服务器,我就像用别的web服务器,这怎么办? (因为asp.net底层本身就和IIS服务器粘合在一起,你怎么拆分?)
现在。net core就很好的解决了这个问题 .net core是跨平台的,如果它还和IIS那么不清不楚的粘合在一起,那就没办法跨平台了。
.net core 与IIS做了彻底的分离,它可以不依赖IIS去运行,它自己就内置了一个服务器(服务器名字好像叫Kestrel,它不是一个直接暴露给公网的普通服务器,如果你将你的应用部署在公共网络上,我们建议你使用IIS,Nginx或者Apache作为反向代理服务器。一个反向代理服务器接收来自网络的HTTP请求并且在经过一些初步处理后将请求传递到Kestrel服务器。如果你的应用只接收来自内部网络的请求,你可以只使用Kestrel本身)

namespace MvcCore
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseKestrel() //启用Kestrel服务器(Kestrel服务器是.net core内置服务器)
            .UseContentRoot(Directory.GetCurrentDirectory()) //指定网站的根目录
            .UseIISIntegration()//表示如果我们的网站可能被寄宿在IIS上运行,那么就需要启用它(建议,无论你的网站是否寄宿在IIS上,你都启用它,因为启用与不启用对我们的网站都没有任何的影响,因为你加上它你的网站照样也可以部署在Linux下)
            .UseStartup<Startup>();//表示启用Startup.cs初始化类
           
    }
}

2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;


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

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        //此方法是初始化一些服务
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;

                 
            });
            services.AddSession();

            //这里是添加对MVC的支持
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            
            //我们的网站有开发状态(线下)和运行状态(线上),IsDevelopment()表示是否为开发环境(线下)
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();//如果是开发环境则启用开发环境的报错页(有详细的报错信息)
            }
            else
            {
                app.UseExceptionHandler("/Home/Error"); //否则启用我们自定义Error错误页(没有详细的报错信息)
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseSession();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}

3

  //IOC

            var serviceAsm = Assembly.Load(new AssemblyName("CMS.Services"));
            //找出实现了IServicesTag接口的非抽象类集合
            var serviceTypes = serviceAsm.GetTypes().Where(r => typeof(IServicesTag).IsAssignableFrom(r) && r.GetTypeInfo().IsAbstract == false);
            foreach (var serviceType in serviceTypes)
            {
                var interfaceTypes = serviceType.GetInterfaces();//获取这个类继承的所有接口
                foreach (var interfaceType in interfaceTypes)//遍历每个接口类
                {
                    services.AddSingleton(interfaceType, serviceType);//把这个类注册为这个接口的实现类。当别人要我这个接口的实现类的时候,我就把这个类的对象给它
                }
            }

猜你喜欢

转载自blog.csdn.net/Fanbin168/article/details/81939518