我在 ASP.NET Core MVC 中有一个 Web API,我向其中传递加密参数,这些参数到达我的 API 时将被转换为小写(这种情况不应该发生,因为原始加密值具有大写和小写字母)。
通过设置以下值来配置启动类的ConfigureServices方法(但问题依然存在)
services.AddRouting(options => options.LowercaseQueryStrings = false);
services.AddRouting(options => options.LowercaseUrls = false);
这就是我在创业课程中学到的内容。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
try
{
var iMvc = services.AddMvc(options =>
{
//options.Filters.Add(new SessionExpireAttribute());
options.EnableEndpointRouting = true;
}).AddPluggins(searchPatternList).AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
options.JsonSerializerOptions.PropertyNamingPolicy = null;
}).AddFluentValidation();
services.AddSession(options =>
{
options.Cookie.Name = "session___";
options.IdleTimeout = TimeSpan.FromMinutes(Configuration["Session:Duration"] == null ? 30 : Convert.ToDouble(Configuration["Session:Duration"]));
options.Cookie.IsEssential = true;
});
services.AddHttpContextAccessor();
services.AddControllersWithViews();
services.AddResponseCaching();
services.AddSignalR();
services.AddRazorPages();
services.AddRouting(options => options.LowercaseQueryStrings = false);
services.AddRouting(options => options.LowercaseUrls = false);
}
catch (Exception ex) { logger.Error(ex); }
}
可能会发生什么?
根据文档,除非
RouteOptions.LowercaseQueryStrings
是RouteOptions.LowercaseUrls
,否则不会使用true
,这让我觉得也许你应该尝试
services.AddRouting(options => {
options.LowercaseQueryStrings = false;
options.LowercaseUrls = false;
});
(只需一次调用
AddRouting
扩展方法即可设置路由选项,而不是连续两次调用。我认为第二个可能会覆盖第一个,但我不确定)
如果这不起作用,我建议您查看
SetCompatibilityVersion
扩展方法,看看更改兼容性选项是否可以修复它。