我想检查浏览器是否为IE,并在剃须刀页面中做一些事情。
我只是在剃刀页面上做了一个功能来做到这一点。
但是,我认为使用该功能检查每个剃刀页面中的浏览器是否为IE是多余的。对于独立用户,我只需要检查一次并设置一个全局变量IsIE = true / false。其他页面将很容易知道,如果是IE。
问题是如何在剃须刀页面中获取/设置全局变量?
谢谢。
——————————————————
对@Neville Nazerane,这里是检查是否为IE的功能:
@{
Boolean IsIE = false;
string UA = Context.Request.Headers["User-Agent"].ToString();
if (UA.Contains("Trident") || UA.Contains("MSIE"))
{
IsIE = true;
}
else
{
IsIE = false; ;
}
if (IsIE == true)
{
}
else
{
}
}
客户端通过向服务器发送请求(带有标头和正文)来处理HTTP请求。然后,您的服务器可以访问此信息并发送响应。这不会在服务器和客户端之间建立任何持久(持续)的连接。这意味着您的服务器与每个客户端之间没有永久链接。您声明的任何全局变量对于服务器的Web应用程序都是全局的,并且对于每个客户端都是通用的。
您要在此处执行的操作是创建与每个客户端的连接隔离的变量。通常,这是在Session
或Cookie
变量的帮助下完成的。但是在这种情况下,我看不出这将如何改善您编写的代码的性能。在您的代码中,您尝试从请求中访问Http标头。Cookie和会话变量的访问方式也非常相似。如果直接从标头中获取内容,则必须具有稍微更好的性能。如果您要清理代码,而不必在每个页面上都编写代码,则服务可能会很有帮助。
您可以为服务创建一个类,如下所示:
public class AgentChecker
{
public bool IsIE { get; set; }
// makes sure check is done only when object is created
public AgentChecker(IHttpContextAccessor accessor)
{
string UA = accessor.HttpContext.Request.Headers["User-Agent"].ToString();
if (UA.Contains("Trident") || UA.Contains("MSIE"))
{
IsIE = true;
}
else
{
IsIE = false;
}
}
// optional to simplify usage further.
public static implicit operator bool(AgentChecker checker) => checker.IsIE;
}
在您的启动类中添加以下内容:
// to access http context in a service
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// makes sure object is created once per request
services.AddScoped<AgentChecker>();
设置完成后,您可以在视图中使用:
@inject AgentChecker checker
@* if you didn't create the implicit operator, you can use if (checker.IsIE) *@
@if (checker)
{
<div>Is ie</div>
}
else
{
<div>not ie</div>
}
在inject
进入你想用这个任意视图页面的顶部。尽管这仍然会创建一个新的对象的每个请求,它是清洁剂使用,只创建一个对象,无论你有多少局部视图中使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句