.net core3.0 api controller层接口

首先,在建立完.net core 3.0项目之后,要让系统能够找到controller层,那么就需要在startup.cs文件当中的ConfigureServices函数当中加入如下代码:

 services.AddControllers();

其次,在config函数当中,也要加入如下配置:

 			app.UseRouting();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

其中app.UseRouting代表使用路由组件。

在做完这些基本的配置之后,建立一个controller

 	[Route("/System/Login")]
    [ApiController]
    public class LoginController: ControllerBase
    {
        private readonly IUserService userService;
        public LoginController(IUserService userComponent)
        {
            this.userService = userComponent;
        }

        [HttpPost("login")]
        public async Task<ActionResult<UserModel>> Add([FromBody]LoginParam param)
        {
            var result = await Task.Run(() =>
            userService.Login(param)
            );
            return Ok(result);
        }
    }

其中Route和HttpPost标签表示的是调用接口的路由,除了HttpPost之外,还有诸如HttpGet这类的标签。为了让路由能够找到这个Controller,这个Controller需要继承.net core架构里的ControllerBase类。
然后是[FromBody]标签指的是从http请求的body里面取数据。除此之外,还有FromHeader,FromQuery,FromForm等标签也是同样差不多的作用。
而IUserService则是提供服务的接口层,通过依赖注入的方式进行初始化。而要用到注入的方式,就需要在startup.cs的ConfigureServices当中加入services.AddSingleton<IUserService, UserService>();来实现注册服务。
当然在实际项目中会有很多的服务接口需要注册,那么这时候可以通过映射的方式来实现自动化注册。
首先在Program.cs中改为:

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

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseServiceProviderFactory(new AutofacServiceProviderFactory());
    }

其次,在startup.cs里加入ConfigureContainer方法并实现,具体实现代码如下:

            builder.RegisterAssemblyTypes(typeof(Program).Assembly)
                    .Where(x => x.Name.EndsWith("Service", StringComparison.OrdinalIgnoreCase))
                    .AsImplementedInterfaces();           

在实际项目可能还会遇到所要映射的类是在第三方库的情况,那么只要在ConfigureContainer方法加入如下代码:

builder.RegisterAssemblyTypes(Assembly.Load("这里是你所要加的第三方库的dll名称")).AsImplementedInterfaces();

猜你喜欢

转载自blog.csdn.net/yzl7997018/article/details/105798944
今日推荐