控制器构造函数未调用

时间:2018-11-12 15:52:02

标签: http asp.net-core routing

您好,我试图了解为什么我的请求未进入我的api路由。它们似乎到达了服务器,但不会在MVC中散开。

服务器正在运行:http://localhost:9300
我要求的路线是:http://localhost:9300/api/getusers

程序

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

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
            var builder = new WebHostBuilder();
            builder.UseStartup<Startup>();
            var url = Address.Default.ToUrl();
            builder.UseKestrel().UseUrls(url);
            return builder;

        }

    }

启动

public class Startup {

        public Startup(IConfiguration configuration) {
            Configuration = configuration;
        }
        public void ConfigureServices(IServiceCollection services) {
            services.AddOptions();
            services.AddMvc();
        }
        public IConfiguration Configuration;
        public void Configure(IApplicationBuilder app) {

            Debug.WriteLine("Entered server"); //enters successfully here
            app.UseMvc(); //does not enter the controller
        }
    }

控制器

这是一个带有GET方法的简单控制器。根本没有调用构造函数。为什么会发生这种情况?我在服务器第一次运行时就知道了。它会对路由进行运行状况检查

[ApiController]
    class UserController : ControllerBase {

        private static List<User> users = new List<User> {
                new User{Id=0,Age=0,Name="Failed"},
                new User{Id=12,Age=33,Name="Daniel"},
                new User{Id=13,Age=33,Name="Marian"},
            };

        public UserController() {
            Debug.WriteLine("Controller called"); //does not get called !
        }
        [HttpGet]
        [Route("api/getusers")]
        public async Task<HttpResponseMessage> GetUsers() {

            await Task.Delay(1000);
            return new HttpResponseMessage {
                Content = new StringContent(users.ToJson()),
                StatusCode = HttpStatusCode.OK
            };
        }
}

PS ,我是否需要添加其他内容?我想念的是我密切关注了其他实现。

1 个答案:

答案 0 :(得分:4)

我已经使用dotnet new webapi创建了webapi项目。 我设法通过更改类似控制器的访问修饰符来访问具有类似配置的url。尝试将public关键字添加到class UserController中。所以应该是public class UserController

如果有必要并且上面的步骤无济于事,我将提供有关项目配置的更多信息。