我的任务是改进我们服务器上的 IIS 预加载和应用程序初始化。我已经在IIS上实现了应用程序初始化和应用程序预加载,但是在回收/重新启动应用程序池时仍然有很长的等待时间。我找到了一些我认为对我有帮助的有用链接,但我仍然没有获得预编译的 Razor 视图。我试图按照 RazorGenerator 的这篇文章进行操作,但它似乎不起作用。 http://blog.davidebbo.com/2011/06/precompile-your-mvc-views-using.html
我为上述文章采取的步骤
1) 从这里安装 VS 扩展:https : //marketplace.visualstudio.com/items?itemName=DavidEbbo.RazorGenerator
2)安装nuget包RazorGenerator.Mvc
3) 将剃刀视图上的输出更改为“无”,并将“自定义工具”设置为“RazorGenerator”,如上面文章所述。
我进行了清理和重建,但没有看到我的 cshtml 文件的 .cs 文件。
好的,那么我认为这不起作用,让我们尝试其他方法......让我们尝试一下 Visual Studio 开箱即用的预编译功能,正如这篇文章的答案所暗示的那样:在 asp .net mvc 中预编译 razor 视图5,但仍然没有预编译的 cshtml 文件。
我想要完成的是如何事先生成这些文件,以便 IIS 不必。这是回收/重启后 IIS 临时缓存文件的图像
这是浏览器请求应用程序后的图像
最后在发布时,我使用了 Visual Studio 预编译(对于上面的两个图像),所以我也附上了我的发布选项图像。
好的...现在我认为这是不可能的,但是然后在这里找到另一个 SO 解决方案:VS2013 不编译 ASP.NET MVC5 视图,但再次发布时,我仍然没有在我的应用程序的临时 IIS 缓存中看到 cshtml 文件的编译版本。是否有任何人都可以建议实际预编译我的应用程序中的 cshtml 文件的可靠解决方案,以便它们不会在第一个浏览器请求时生成?我什至在我的 web 配置中进行了应用程序初始化并安装了所需的 IIS 功能,甚至可以看到它确实向我的应用程序发出了“假”请求,但是 cshtml 文件不会根据该“假”请求进行编译。对不起,如果我附上了很多信息,但似乎我在这里问的每个问题我都没有提供我的实际问题...=(希望这个问题可以达到目的。谢谢!
更新
上面的最后一篇文章建议更改 csproj 文件,因此我也尝试过并附上该文件的屏幕截图。
以及文件底部的 Action
将“temp”更改为“/”也无济于事。
更新 2
因此,在周末离开计算机后,我今天早上注意到我选中了“允许预编译的站点可更新”。取消选中该值后,我开始在 …
如何在Cookie选项中将中间件应用于OnRedirectToLogin事件(以便可以使用依赖项注入),或者如何从RedirectContext检索actionContext?我曾尝试搜索文档或示例,但是很难找到,也没有看到任何示例说明或定义方法。这有可能吗?
我的Startup.cs
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(o =>
{
o.AccessDeniedPath = new PathString("/Error/AccessDenied");
o.LoginPath = new PathString("/Account/Login/");
o.Cookie.Path = "/";
o.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
o.Cookie.HttpOnly = true;
o.LogoutPath = new PathString("/Account/Logout/");
o.Events.OnRedirectToLogin = (context) =>
{
var routeData = context.HttpContext.GetRouteData();
RouteValueDictionary routeValues = new RouteValueDictionary();
if (routeData != null) routeValues.Add("lang", routeData.Values["lang"]);
Uri uri = new Uri(context.RedirectUri);
string returnUrl = HttpUtility.ParseQueryString(uri.Query)[context.Options.ReturnUrlParameter];
string focustab = "";
context.Request.Query.ToList().ForEach(x =>
{
if (x.Key == "id") routeValues.Add("id", x.Value.FirstOrDefault());
if (x.Key == "values") routeValues.Add("values", x.Value.FirstOrDefault());
});
routeValues.Add(context.Options.ReturnUrlParameter, returnUrl + focustab); …Run Code Online (Sandbox Code Playgroud) 我是 blazor 的新手,很高兴开始为我们的一些内部应用程序尝试它,但是我在理解绑定/更改事件时遇到了一些麻烦。从一个新的 Blazor 项目开始,我添加了一个 AppService 单例并将该服务注入到一个新页面(建筑物)和我的导航菜单中。在导航菜单和构建页面上,我都有一个绑定到服务属性的复选框,即。
当我更改复选框时,它会更新该页面上的服务属性,但不会更新内容区域页面上的属性。我做错了什么?
更新:我确实尝试在此处实施解决方案:Blazor - DI Service 的属性更改后,剃刀页面未更新,但不幸的是,当我执行此操作时,我的应用程序甚至无法运行。=((程序“[26772] iisexpress.exe”已退出,代码为 -1073741819 (0xc0000005)“访问冲突”。)
应用服务。
public class AppService
{
public bool IsAdmin { get; set; } = true;
public event Action OnChange;
private void NotifyDataChanged() => OnChange?.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs 配置服务方法
services.AddSingleton<Services.AppService>();
Run Code Online (Sandbox Code Playgroud)
导航菜单。
@inject Services.AppService AppService
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">Staff Management</a>
<button class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" …Run Code Online (Sandbox Code Playgroud)