我正在玩一个新的ASP.NET 5 MVC 6应用程序。到目前为止,它是Visual Studio在选择ASP.NET 5 MVC项目时创建的一个空的,开箱即用的应用程序。
在Home控制器操作中,我添加了一行,看看我是否被重定向到一般错误页面,即〜/ Views / Shared / Error.cshtml
throw new UnauthorizedAccessException("Test exception!");
当我运行项目时,我得到的只是我的代码中的例外,但不会被重定向到错误页面。
以下是标准的Startup.cs - 再次,开箱即用的代码。我还没有做任何改变。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
我不应该被重定向到错误页面吗?
答案 0 :(得分:2)
让我们解构有趣的部分(我删除了不相关的代码):
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
第一个是IsDevelopment()
。 CLR如何知道?嗯......当你在Visual Studio中执行ASPNET_ENV
时,会设置一个名为F5
的环境变量。它会自动将其设置为Development
,然后它会显示一个非常好的堆栈跟踪,就像<customErrors mode="Off"/>
一样。
如果从您说的基本命令行运行此操作会发生什么?如果您愿意,默认值为Production
(或!IsDevelopment()
),并且会突然使用UseExceptionHandler(...)
。
正是在那一刻,重定向将会发生。
Visual Studio将自动以Development
模式运行您的应用程序。
独立运行应用程序将默认为Production
。
您可以在环境变量中设置ASPNET_ENV
来重新定义此值。它可以是任何内容,唯一会影响此代码的值是Development
。
答案 1 :(得分:0)
听起来您通过cmd通过DNX执行此操作,这会将ASPNET_ENV
设置为生产,而不是开发。
我喜欢在启动时记录环境名称以帮助调试此类场景;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
loggerFactory.CreateLogger("Startup") // add
.LogInformation($"Startup: {env.EnvironmentName}"); // this
...
}
否则你可以在if (env.IsDevelopment())
上设置一个断点,以确保你能够击中它。如果在VS2015中运行项目,它将作为 Development 运行,但是,如果在命令提示符下通过DNX运行它,则需要设置ASPNET_ENV
环境变量开发。
答案 2 :(得分:0)
这绝不是推荐的实现方法,但您可以使用:
if (app.WebRootPath.Contains("Development"))
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
这将检查存储Web应用程序的文件路径中是否为“开发”一词并相应地应用设置,您可以使用方法强制更改环境(只要您的Web根目录设置正确)。 / p>
更多信息,请看这个链接:
https://blogs.msdn.microsoft.com/webdev/2016/02/01/an-update-on-asp-net-core-and-net-core/ 还有这个: http://docs.asp.net/en/latest/fundamentals/environments.html
RC2正在改变有关部署和托管的一些基本要素,所以现在可能值得阅读它们,然后才能让自己走上一条道路?