我遇到一个问题,即使用方法调用IHostingEnvironment.IsDevelopment()导致413被Web服务器抛回。当我删除此调用时,我的方法适用于相同的请求。
我不确定是否以某种方式降低了DefaultRequestSize限制30MB https://github.com/aspnet/Announcements/issues/267
或者还有其他我不知道的事情。
通过将自定义服务配置移到
中,从启动类的ConfigureServices(IServiceCollection)方法中删除了IHostingEnviornment.IsDevelopment()调用,从而缓解了该问题。ConfigureProductionServices(IServiceCollection)和 ConfigureDevelopmentServices(IServiceCollection)
并删除对IHostingEnvironment.ISDevelopment()的调用,但是我想知道上述方法出了什么问题,因为应该支持它。
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.2
我已将Startup构造函数配置为接受以下输入
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
// whatever else need to be coded for startup
HostingEnvironment = env;
}
在我的ConfigureSerivces方法中调用env变量的地方
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsDevelopment())
{
//Dev services added
}
else
{
// Prod services added
}
}
以上配置设置了一些如何使413在我以前无法使用时从我的Web api调用返回的原因。
我已经通过以下代码方法解决了该问题
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
// whatever else need to be coded for startup
HostingEnvironment = env;
}
public void ConfigureDevelopmentServices(IServiceCollection services)
{
// Add Dev Services
StartupConfigureServices(services);
}
public void ConfigureProductionServices(IServiceCollection services)
{
// Add Prod Services
StartupConfigureServices(services);
}
但是我忍不住有一天会回来咬我的感觉。
我还可以在控制器方法上使用follow属性来解决此问题
[DisableRequestSizeLimit]
,但是出于某种原因,它必须放置在Route Attribute上方。我不希望使用此修复程序,因为我觉得它很不安全,而且对于正在发生的事情我仍然一无所知。
我已将以下代码行放在一个控制器中,并用两种启动设计调试了应用程序,但在控制器方法调用中,两种设计仍为空值。
var test = HttpContext.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize;