路由到剃刀页面应用程序中的ApiController?

时间:2018-06-25 20:38:26

标签: c# asp.net-core asp.net-core-webapi razor-pages

我创建了一个ASP.NET Core Razor页面应用程序(asp.net版本2.1.1)。它与正常的Pages正常工作,但我也希望像本教程中那样使用ApiController: https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-vsc?view=aspnetcore-2.1

但是,当我按照上面的示例创建控制器时,只要尝试访问它,就会得到一个404页面。

启动类是否缺少我的东西?

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.AddDbContext<DomainDbContext>(opt => opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            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)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

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

            app.UseMvc();
        }

还有我的apicontroller类:

    [Route("api/[controller]")]
    [ApiController]
    class DomainController : ControllerBase 
    {
        private readonly DomainDbContext _context;

        public DomainController (DomainDbContext context) 
        {
            _context = context;
        }

        [HttpGet]
        public ActionResult<List<Domain>> GetAll()
        {
            return new List<Domain> {new Domain() {Name ="Hello", Tld = ".se", Expiration = DateTime.UtcNow.AddDays(35)}};
        }
}

据我所知,一切看起来都像指南,但显然有些不正确,因为我得到的所有页面均为404。即使我创建了一个新方法,它实际上也无法按预期工作,并且无法访问。

我尝试过的主要路径是/api/domain

谢谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您需要具有公共控制器类。

所以代替:

bazel-bin/src/map/libmap.so

您应该拥有这个:

[Route("api/[controller]")]
[ApiController]
class DomainController : ControllerBase
{
    [...]
} 

答案 1 :(得分:0)

只需将 endpoints.MapControllers() 添加到 UseEndpoints 选项:

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