【问题标题】:Controller constructor does not get called控制器构造函数没有被调用
【发布时间】:2018-11-13 14:39:02
【问题描述】:

您好,我想了解为什么我的请求没有进入我的 api 路由。它们似乎到达了服务器,但它们不会在 MVC 中扇出。

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

Program

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
            };
        }
}

P.S我必须添加任何东西吗?我错过了什么,我密切关注其他实现。

【问题讨论】:

    标签: http asp.net-core routing


    【解决方案1】:

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

    如果有必要,我将提供有关项目配置的更多信息,并且上述步骤没有帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-12
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多