Маршрутизация атрибутов для простого контроллера ping с неработающим Get () - PullRequest
0 голосов
/ 11 июля 2019

У меня есть простой веб-API ядра asp.net с контроллером смещения, который возвращает true для запроса Get. PingController.cs выглядит следующим образом:

[Route("api/[Controller]")]
public class PingController : Controller
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok(true);
    }
}

Почему переход к контроллеру (http://localhost:56103/api/Ping) возвращает 404?

Я добавил маршрут поверх контроллера и HttpMethod для конкретных действий. Что мне здесь не хватает или я не понимаю?

Когда я добавляю app.UseMvcWithDefaultRoute() в Startup.cs, контроллер работает нормально. (Это также смущает меня.) Startup.cs выглядит следующим образом:

public class Startup
{

            public IConfiguration Configuration { get; set; }

            public Startup()
            {
               Configuration = BuildConfiguration();
            }

            // This method gets called by the runtime. Use this method to add services to the container.
            public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                ...
            }

            // 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
                {
                    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                    app.UseHsts();
                }
                ConfigureRoutes(app);
            }

            private static void ConfigureMvc(IServiceCollection services, Config config)
            {
                services.AddMvc()
                    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)// auto generated
                    .AddJsonOptions(options => { options.SerializerSettings.Formatting = Formatting.Indented; })
                    .AddControllersAsServices();

            }

            private static void ConfigureRoutes(IApplicationBuilder app)
            {
                //app.UseMvcWithDefaultRoute();
            }
        }

1 Ответ

3 голосов
/ 11 июля 2019

Вам нужно добавить UseMvc() или UseMvcWithDefaultRoute() при запуске, чтобы определить маршрутизацию.

UseMvcWithDefaultRoute добавляет маршрут по умолчанию 'default' в конвейер выполнения запроса и равен

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