Ich erstelle eine einfache API mit ASP.NET Core und habe ein Problem, bei dem alle meine Routen einen 404 -Fehler zurückgeben. Mein OrderController ist korrekt definiert mit geeigneten HTTP -Verben (Get, Post, Put, Löschen) und Routen, aber die Anforderungen an die API treffen nicht wie erwartet auf die Controller -Aktionen. < /P>
Hier ist mein OrderController -Code: < /p>
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
using System.Collections.Generic;
using System.Threading.Tasks;
using TmbApplication.Models;
using TmbApplication.Services;
namespace TmbApplication.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class OrderController(IOrderService orderService) : ControllerBase
{
private readonly IOrderService _orderService = orderService;
[HttpGet]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(200, Type = typeof(IEnumerable))]
[ProducesResponseType(500)]
public async Task GetOrders()
{
var orders = await _orderService.GetAllOrdersAsync();
return Ok(orders);
}
[HttpGet("{id}")]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(200, Type = typeof(Order))]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
public async Task GetOrder(Guid id)
{
var order = await _orderService.GetOrderByIdAsync(id);
if (order == null)
{
return NotFound();
}
return Ok(order);
}
[HttpPost]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(201, Type = typeof(Order))]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public async Task CreateOrder([FromBody] Order order)
{
if (order == null)
{
return BadRequest("Invalid data.");
}
var createdOrder = await _orderService.CreateOrderAsync(order);
return CreatedAtAction(nameof(GetOrder), new { id = createdOrder.Id }, createdOrder);
}
[HttpPut("{id}")]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(204)]
[ProducesResponseType(400)]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
public async Task UpdateOrder(Guid id, [FromBody] Order order)
{
if (id != order.Id)
{
return BadRequest("Order ID mismatch.");
}
var existingOrder = await _orderService.GetOrderByIdAsync(id);
if (existingOrder == null)
{
return NotFound();
}
await _orderService.UpdateOrderAsync(order);
return NoContent();
}
[HttpDelete("{id}")]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(204)]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
public async Task DeleteOrder(Guid id)
{
var order = await _orderService.GetOrderByIdAsync(id);
if (order == null)
{
return NotFound();
}
await _orderService.DeleteOrderAsync(id);
return NoContent();
}
}
}
< /code>
Und hier ist das Programm.cs: < /p>
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
using TmbApplication.Models;
using TmbApplication.Services;
using Microsoft.Extensions.DependencyInjection;
using TmbApplication.Data;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
builder.Services.AddDbContext(options =>
options.UseNpgsql("DbConnection"));
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Exemplo", Version = "v1" });
});
builder.Services.AddScoped();
builder.Services.AddControllers();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Exemplo v1");
});
}
app.UseCors("AllowAll");
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
< /code>
Dinge, die ich bereits überprüft habe:
Die MapControllers () ist im Programm vorhanden. ] ")] im Controller).
Der Controller ist korrekt registriert und addControllers () ist im Programm enthalten. Werden die Protokolle von Docker das
Problem zeigen: < /p>
2025-02-11 07:33:42 Info: microsoft.aspnetcore.hosting.diagnostics [1] < Br/> 2025-02-11 07:33:42 Anforderung Start http/1.1 Get
http: // localhost: 3000/api/order/-application/json 155 2025-02-11
07 : 33: 42 info: microsoft.aspnetcore.hosting.diagnostics [2] 2025-02-11
07:33:42 Anfrage beendet http/1.1 Get
http: // localhost: 3000/api/ Bestellung /-404 0-8.9322ms 2025-02-11
07:33:42 Info: Microsoft.aspnetcore.hosting.diagnostics [16] 2025-02-11
07:33:42 Anfrage erreicht Das Ende der Middleware -Pipeline
ohne mit dem Anwendungscode gehandhabt zu werden. Anfragepfad: Get
http: // localhost: 3000/api/order/, Antwortstatuscode: 404 2025-02-11
07:33:47 Info: microsoft.aspnetcore.hosting.diagnostics [ 1] 2025-02-11
07:33:47 Anforderung Start http/1.1 get
http: // localhost: 3000/Swagger-Anwendung/JSON 155 2025-02-11
07 : 33: 47 info: microsoft.aspnetcore.hosting.diagnostics [2] 2025-02-11
07:33:47 Anfrage beendet http/1.1 Get
http: // localhost: 3000/swagger- 404 0-0.4094ms 2025-02-11 07:33:47
Info: Microsoft.aspnetcore.hosting.diagnostics [16] 2025-02-11 07:33:47
Anfrage erreicht das Ende von Die Middleware -Pipeline, ohne mit dem Anwendungscode
behandelt zu werden. Anforderungspfad: Get
http: // localhost: 3000/Swagger, Antwortstatuscode: 404
Was könnte alle Routen zurückkehren lassen 404 Fehler? Jede Hilfe wäre sehr geschätzt!
Ich erstelle eine einfache API mit ASP.NET Core und habe ein Problem, bei dem alle meine Routen einen 404 -Fehler zurückgeben. Mein OrderController ist korrekt definiert mit geeigneten HTTP -Verben (Get, Post, Put, Löschen) und Routen, aber die Anforderungen an die API treffen nicht wie erwartet auf die Controller -Aktionen. < /P>
Hier ist mein OrderController -Code: < /p>
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
using System.Collections.Generic;
using System.Threading.Tasks;
using TmbApplication.Models;
using TmbApplication.Services;
namespace TmbApplication.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class OrderController(IOrderService orderService) : ControllerBase
{
private readonly IOrderService _orderService = orderService;
[HttpGet]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(200, Type = typeof(IEnumerable))]
[ProducesResponseType(500)]
public async Task GetOrders()
{
var orders = await _orderService.GetAllOrdersAsync();
return Ok(orders);
}
[HttpGet("{id}")]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(200, Type = typeof(Order))]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
public async Task GetOrder(Guid id)
{
var order = await _orderService.GetOrderByIdAsync(id);
if (order == null)
{
return NotFound();
}
return Ok(order);
}
[HttpPost]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(201, Type = typeof(Order))]
[ProducesResponseType(400)]
[ProducesResponseType(500)]
public async Task CreateOrder([FromBody] Order order)
{
if (order == null)
{
return BadRequest("Invalid data.");
}
var createdOrder = await _orderService.CreateOrderAsync(order);
return CreatedAtAction(nameof(GetOrder), new { id = createdOrder.Id }, createdOrder);
}
[HttpPut("{id}")]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(204)]
[ProducesResponseType(400)]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
public async Task UpdateOrder(Guid id, [FromBody] Order order)
{
if (id != order.Id)
{
return BadRequest("Order ID mismatch.");
}
var existingOrder = await _orderService.GetOrderByIdAsync(id);
if (existingOrder == null)
{
return NotFound();
}
await _orderService.UpdateOrderAsync(order);
return NoContent();
}
[HttpDelete("{id}")]
[ApiExplorerSettings(GroupName = "v1")]
[ProducesResponseType(204)]
[ProducesResponseType(404)]
[ProducesResponseType(500)]
public async Task DeleteOrder(Guid id)
{
var order = await _orderService.GetOrderByIdAsync(id);
if (order == null)
{
return NotFound();
}
await _orderService.DeleteOrderAsync(id);
return NoContent();
}
}
}
< /code>
Und hier ist das Programm.cs: < /p>
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
using TmbApplication.Models;
using TmbApplication.Services;
using Microsoft.Extensions.DependencyInjection;
using TmbApplication.Data;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
builder.Services.AddDbContext(options =>
options.UseNpgsql("DbConnection"));
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Exemplo", Version = "v1" });
});
builder.Services.AddScoped();
builder.Services.AddControllers();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Exemplo v1");
});
}
app.UseCors("AllowAll");
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
< /code>
Dinge, die ich bereits überprüft habe:
Die MapControllers () ist im Programm vorhanden. ] ")] im Controller).
Der Controller ist korrekt registriert und addControllers () ist im Programm enthalten. Werden die Protokolle von Docker das [url=viewtopic.php?t=11587]Problem[/url] zeigen: < /p>
2025-02-11 07:33:42 Info: microsoft.aspnetcore.hosting.diagnostics [1] < Br/> 2025-02-11 07:33:42 Anforderung Start http/1.1 Get
http: // localhost: 3000/api/order/-application/json 155 2025-02-11
07 : 33: 42 info: microsoft.aspnetcore.hosting.diagnostics [2] 2025-02-11
07:33:42 Anfrage beendet http/1.1 Get
http: // localhost: 3000/api/ Bestellung /-404 0-8.9322ms 2025-02-11
07:33:42 Info: Microsoft.aspnetcore.hosting.diagnostics [16] 2025-02-11
07:33:42 Anfrage erreicht Das Ende der Middleware -Pipeline
ohne mit dem Anwendungscode gehandhabt zu werden. Anfragepfad: Get
http: // localhost: 3000/api/order/, Antwortstatuscode: 404 2025-02-11
07:33:47 Info: microsoft.aspnetcore.hosting.diagnostics [ 1] 2025-02-11
07:33:47 Anforderung Start http/1.1 get
http: // localhost: 3000/Swagger-Anwendung/JSON 155 2025-02-11
07 : 33: 47 info: microsoft.aspnetcore.hosting.diagnostics [2] 2025-02-11
07:33:47 Anfrage beendet http/1.1 Get
http: // localhost: 3000/swagger- 404 0-0.4094ms 2025-02-11 07:33:47
Info: Microsoft.aspnetcore.hosting.diagnostics [16] 2025-02-11 07:33:47
Anfrage erreicht das Ende von Die Middleware -Pipeline, ohne mit dem Anwendungscode
behandelt zu werden. Anforderungspfad: Get
http: // localhost: 3000/Swagger, Antwortstatuscode: 404
Was könnte alle Routen zurückkehren lassen 404 Fehler? Jede Hilfe wäre sehr geschätzt!