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 werden nicht wie erwartet auf die Controller -Aktionen klicken.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. /> Hier sind die Protokolle von Docker, die das
Problem zeigen: < /p>
2025-02-11 07:33:42 Info: Microsoft.aspnetcore.hosting.Diagnostics [1]
2025-02-11 07:33:42 Anfrage 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 Anforderungsverfolgung fertige HTTP/1.1 GET
07:33:42 Anforderungsverfolgung fertige HTTP/1.1 und 1.1 Gehen /> http: // localhost: 3000/api/order/-404 0-8.9322ms 2025-02-11
07:33:42 Info: microsoft.aspnetcore.hosting.Diagnostik [16] 2025-02-11
07:33:42 Anfragen erreicht am Ende des Middle-Middle-Pipeline. Anforderungspfad: Get
http: // localhost: 3000/api/order/, Antwortstatuscode: 404 2025-02-11
07:33:47 Info: microsoft.aspnetcore.hosting.Diagnostics [1] 2025-11
07:33:47 Anfrage beginnt mit htttp/1.1 Get
07:33:47 Anfrage beginnt mit htttp/1.1 Get
07:33:47 Anfragetan angerufen, an der http/1.1 Get
07:33:47 Anfrage begonnen wird. />
http://localhost:3000/swagger - application/json 155 2025-02-11
07:33:47 info: Microsoft.AspNetCore.Hosting.Diagnostics[2] 2025-02-11
07:33:47 Request finished HTTP/1.1 GET
http://localhost:3000/swagger . Anforderungspfad: Get
http: // localhost: 3000/Swagger, Antwortstatuscode: 404
Was kann dazu führen, dass alle Routen 404 Fehler zurückgeben? 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 werden nicht wie erwartet auf die Controller -Aktionen klicken.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. /> Hier sind die Protokolle von Docker, die das [url=viewtopic.php?t=20324]Problem[/url] zeigen: < /p>
2025-02-11 07:33:42 Info: Microsoft.aspnetcore.hosting.Diagnostics [1]
2025-02-11 07:33:42 Anfrage 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 Anforderungsverfolgung fertige HTTP/1.1 GET
07:33:42 Anforderungsverfolgung fertige HTTP/1.1 und 1.1 Gehen /> http: // localhost: 3000/api/order/-404 0-8.9322ms 2025-02-11
07:33:42 Info: microsoft.aspnetcore.hosting.Diagnostik [16] 2025-02-11
07:33:42 Anfragen erreicht am Ende des Middle-Middle-Pipeline. Anforderungspfad: Get
http: // localhost: 3000/api/order/, Antwortstatuscode: 404 2025-02-11
07:33:47 Info: microsoft.aspnetcore.hosting.Diagnostics [1] 2025-11
07:33:47 Anfrage beginnt mit htttp/1.1 Get
07:33:47 Anfrage beginnt mit htttp/1.1 Get
07:33:47 Anfragetan angerufen, an der http/1.1 Get
07:33:47 Anfrage begonnen wird. />http://localhost:3000/swagger - application/json 155 2025-02-11
07:33:47 info: Microsoft.AspNetCore.Hosting.Diagnostics[2] 2025-02-11
07:33:47 Request finished HTTP/1.1 GET
http://localhost:3000/swagger . Anforderungspfad: Get
http: // localhost: 3000/Swagger, Antwortstatuscode: 404
Was kann dazu führen, dass alle Routen 404 Fehler zurückgeben? Jede Hilfe wäre sehr geschätzt!