有什么区别以及何时使用什么?如果我总是使用ToLower()会有什么风险,如果我总是使用ToLowerInvariant(),风险又是什么?
如何在ASP.NET MVC中使用小写,加上下划线?所以我/dinners/details/2打电话DinnersController.Details(2),如果可能的话,/dinners/more_details/2打电话DinnersController.MoreDetails(2)?
所有这些仍然使用像这样的模式{controller}/{action}/{id}.
HTTP 301和308状态代码有什么区别?
301 (永久移动):此和所有将来的请求应定向到给定的URI.
308 (永久重定向):应使用另一个URI重复请求和所有将来的请求.
他们似乎很相似.
http http-status-codes http-status-code-301 http-status-code-308
在ASP.NET 4中,这与应用程序routes.LowercaseUrls = true;的RegisterRoutes处理程序一样简单.
我无法在ASP.NET Core中找到实现此目的的等价物.我想它会在这里:
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
但configureRoutes看起来没什么可以允许的......除非在某个地方找到一个我在文档中找不到的扩展方法呢?
ASP.NET Core 默认使用类似http:// localhost:5000/DashboardSettings/Index的CamelCase-Routes .但我想使用小写路由,这些路由由破折号分隔:http:// localhost:5000/dashboard-settings/index它们更常见且一致,因为我的应用程序扩展了一个运行Wordpress的网站,该网站也有小写网址破折号.
我了解到我可以使用路由选项将URL更改为小写:
services.ConfigureRouting(setupAction => {
setupAction.LowercaseUrls = true;
});
Run Code Online (Sandbox Code Playgroud)
这有效,但给了我网址没有任何分隔符,如http:// localhost:5000/dashboardsettings/index,这些分隔符很难读.我可以使用路由属性来定义自定义路由
[Route("dashboard-settings")]
class DashboardSettings:Controller {
public IActionResult Index() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
但这会导致额外的工作并且容易出错.我更喜欢一个自动解决方案,它搜索大写字符,在它们之前插入一个破折号并使大写字母小写.对于旧的ASP.NET来说,这不是一个大问题,但在ASP.NET Core上,我看不到如何处理这个问题的方向.
这是怎么做到这里的?我需要一些接口,我可以生成url(比如标记帮助器)并用dash-delimiters替换CamelCase.然后我需要另一种接口用于路由,以便将破折号分隔符URL转换回CamelCase,以便与我的控制器/动作名称正确匹配.
我想在 .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", …Run Code Online (Sandbox Code Playgroud)