I try to build a simple API but routing seems doesn't work such as not the page found on the web browser.
For example, when I type https://localhost:5001/xyz
no page is found. However, https://localhost:5001/
works.
Startup.cs
using denemeWebApp.Data;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using denemeWebApp.Data.Entities;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
namespace denemeWebApp
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<MyWorldDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("MyWorldDbConnection"));
});
services.AddControllers()
.AddOData(option => option.Select().Filter().Count().OrderBy().Expand());
services.AddControllers()
.AddOData(option => option.Select().Filter()
.Count().OrderBy().Expand().SetMaxTop(100)
.AddRouteComponents("odata", GetEdmModel()));
}
public static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Gadgets>("GadgetsOdata");
return modelBuilder.GetEdmModel();
}
// 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();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });
}
}
}
MyWorldDbContext.cs using System; using denemeWebApp.Data.Entities; using Microsoft.EntityFrameworkCore;
namespace denemeWebApp.Data
{
public class MyWorldDbContext : DbContext
{
public MyWorldDbContext(DbContextOptions<MyWorldDbContext> options) : base(options)
{
}
public DbSet<Gadgets> Gadgets { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// below line to watch the ef core sql quiries generation
// not at all recomonded for the production code
optionsBuilder.LogTo(Console.WriteLine);
}
}
}
GadgetsController.cs
using denemeWebApp.Data;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
namespace denemeWebApp.Controllers
{
[Route("xyz")]
[ApiController]
public class GadgetsController : Controller
{
private readonly MyWorldDbContext _myWorldDbContext;
public GadgetsController(MyWorldDbContext myWorldDbContext)
{
_myWorldDbContext = myWorldDbContext;
}
[EnableQuery]
[HttpGet("Get")]
public IActionResult Get()
{
return Ok(_myWorldDbContext.Gadgets.AsQueryable());
}
}
}
appsettings.json
{
"ConnectionStrings": {
"MyWorldDbConnection": "Server=localhost,1434;Database=master;Trusted_Connection=True;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}