我想在 .NET 6 API 项目中强制执行小写路由。
这是我的Program.cs:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Run Code Online (Sandbox Code Playgroud)
这是我的WeatherForecastController.cs:
using Microsoft.AspNetCore.Mvc;
namespace Weather.API.Controllers
{
[ApiController]
[Route("weatherforecast")]
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(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我预计只有小写路由(https://localhost:7243/weatherforecast)可以工作,但是带 pascal/uppercase 的路由也可以工作(https://localhost:7243/Weatherforecast)
我以为我可以添加builder.Services.AddRouting(options => options.LowercaseUrls = true);and app.UseRouting(),但我仍然可以使用 pascal/uppercase 访问路线:https://localhost:7243/Weatherforecast。
这是Program.cs我尝试过的修改后的文件,但不起作用:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRouting(options => options.LowercaseUrls = true);
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.UseRouting();
app.MapControllers();
app.Run();
Run Code Online (Sandbox Code Playgroud)
小智 18
要生成小写 URL,请将以下内容添加到Program.cs。(注意:这不会强制使用小写 URL)。
// generate lowercase URLs
builder.Services.Configure<RouteOptions>(options =>
{
options.LowercaseUrls = true;
});
var app = builder.Build();
Run Code Online (Sandbox Code Playgroud)
要强制使用小写 URL,请创建一个基于 IRule 的规则,将所有大写 URL 重定向到小写 URL。
请参阅此stackoverflow 答案和基于 IRule 的规则文档。
创建基于 IRule 的规则(即RedirectLowerCaseRule)后,将以下内容添加到Program.cs:
var app = builder.Build();
// enforce lowercase URLs
// by redirecting uppercase urls to lowercase urls
var options = new RewriteOptions().Add(new RedirectLowerCaseRule());
app.UseRewriter(options);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4948 次 |
| 最近记录: |