向ASP.NET Core项目添加API控制器

问题描述 投票:1回答:3

这里是脚手架并进行了编辑的控制器。

namespace TheAspNetCoreProject
{
    [Route("api/TheApi")]
    [ApiController]
    public class TheApiController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetInfo()
        {
            return Ok("Foo");
        }
    }
}

我希望在/api/TheApi//api/TheApi/Info/api/TheApi/GetInfo看到它,但什么也没有。

[Startup.cs,脚手架没有做任何事情,但是docs中没有提到例如Startup.cs中需要任何东西,这听起来不太可能。

我该如何使用它?

c# asp.net-web-api asp.net-core-webapi
3个回答
1
投票

我刚刚启动了VS,并从模板创建了一个新的.net核心Web Api项目,它可以按您期望的方式工作:

[ApiController]
[Route("api/TheApi")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        var rng = new Random();
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }
    [HttpGet("OtherGet")]
    public IEnumerable<WeatherForecast> OtherGet()
    {
        var rng = new Random();
        return Enumerable.Range(1, 2).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

有效网址:

Startup.cs看起来像这样:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

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

0
投票

[经过很多非常不愉快的尝试和错误之后,我现在可以报告确实确实需要更新Startup.cs-支架webAPI控制器尚未更新它。

在我的位置>

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)

我有

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

并且需要更改为

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapControllers(); // Added for webAPI.
            });

-1
投票

默认情况下,Web API路由的定义如下:api/{controller}。请注意,不存在{action}

© www.soinside.com 2019 - 2024. All rights reserved.