Laden...

Wieso wird bei meiner WebAPI mit .NET 5 mein Controller nie aufgerufen?

Erstellt von lhyn vor 3 Jahren Letzter Beitrag vor 3 Jahren 434 Views
L
lhyn Themenstarter:in
136 Beiträge seit 2015
vor 3 Jahren
Wieso wird bei meiner WebAPI mit .NET 5 mein Controller nie aufgerufen?

Hallo zusammen,

Ich versuche mich gerade an einer kleinen web-api und finde den Fehler nicht...
Alle Abfragen mit Postman geben kein JSON zurück 8o

Über den Debugger habe ich festgestellt, dass der HttpGet Request (via Postman) des CalculateController nie aufgerufen wird, mir gehen langsam die Ideen aus.

Startup.cs



namespace DPCalculator.Api
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddScoped<ICalculateService, CalculateService>();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

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


Models:


namespace DPCalculator.Api.Models
{
    public class Project
    {
        public PlcType PlcType { get; set; } = PlcType.Test1;
        public int NumberOfSelectedStations { get; set; }
    }
}

namespace DPCalculator.Api.Models
{
    public enum PlcType
    {
        Test1,
        Test2,
        Test3
    }
}

Services:


namespace DPCalculator.Api.Services.CalculateService
{
    public class CalculateService : ICalculateService
    {
        private Project _project = new Project();
        public async Task<Project> GetProject()
        {
            return _project;
        }
    }
}

namespace DPCalculator.Api.Services.CalculateService
{
    public interface ICalculateService
    {
        Task<Project> GetProject();
    }
}

Controllers:


namespace DPCalculator.Api.Controllers
{
    [ApiController]
    [Route("controller")]
    public class CalculateController : ControllerBase
    {
        private readonly ICalculateService _calculateService;
        public CalculateController(ICalculateService calculateService)
        {
            _calculateService = calculateService;
        }

        [HttpGet("GetProject")]
        public async Task<IActionResult> Get()
        {
            return Ok(await _calculateService.GetProject());
        }

    }
}

D
261 Beiträge seit 2015
vor 3 Jahren

Soll der template Parameter des RouteAttribute eventuell [Route("[controller]")] heißen?
Und welche URL/Route rufst du denn auf?

L
lhyn Themenstarter:in
136 Beiträge seit 2015
vor 3 Jahren

Hallo dannoe,

Nein, der sollte calculate heissen, da der Controller "CalculateController" heisst.

Ich habe schon so einiges probiert: https wie auch http
Dann nur über http://localhost:5000/calculate, da ich Task<IActionResult> Get() geschrieben habe.

Zum Schluss noch http://localhost:5000/calculate/getproject wie im Code gezeigt "[HttpGet("GetProject")]"

Gruss Lhyn

D
261 Beiträge seit 2015
vor 3 Jahren

Dir fehlen aber die eckigen Klammern um das controller.
Wenn du möchtest, dass er in das Template den Controllernamen einsetzt, musst du [controller] schreiben, nicht einfach nur controller.

L
lhyn Themenstarter:in
136 Beiträge seit 2015
vor 3 Jahren

Hallo dannoe,

Du bist super, danke Dir nun funktioniert es 👍 😁

Gruss Lhyn