小编Tom*_*gan的帖子

Chrome自动将用户名填充为随机文本输入

这是在使用Chrome版本72.0.3626.109(正式版本)(64位)的asp.net网络表单应用程序上发生的。

该站点受密码保护。用户使用用户名和密码登录。成功登录后,用户将被重定向到“贷款搜索”页面。贷款搜索页面包含少量文本输入。

问题是Chrome会将我的用户名自动填充到其中一个文本输入中(见图片)。“ tregan”是我在登录页面中输入的用户名。

在此处输入图片说明

Chrome始终会选择此特定的文本输入来自动填充用户名(“联系邮件地址”)。这是我本人以及我们网站的其他数十名用户所发生的。

您知道Chrome为什么要执行此自动填充功能吗,有什么我可以防止的方法吗?我清除了Chrome自动填充缓存,但这并不能解决问题。

asp.net google-chrome autofill

16
推荐指数
1
解决办法
4526
查看次数

LINQ to SQL不会生成sargable查询

我正在使用LINQ To Sql(非实体框架),System.Data.Linq.DataContext库,访问SQL Server 2005数据库并使用.Net Framework 4.

表dbo.Dogs有一个CHAR(1)NULL类型的"Active"列.如果我直接写SQL,查询将是:

SELECT * FROM dbo.Dogs where Active = 'A';
Run Code Online (Sandbox Code Playgroud)

LINQ查询是这样的:

from d in myDataContext.Dogs where d.Active == 'A' select d;
Run Code Online (Sandbox Code Playgroud)

从上面的LINQ查询生成的SQL将Active字段转换为UNICODE.这意味着我无法在dbo.Dogs.Active列上使用索引,从而显着减慢查询速度:

SELECT [t0].Name, [t0].Active
FROM [dbo].[Dog] AS [t0]
WHERE UNICODE([t0].[Active]) = @p1
Run Code Online (Sandbox Code Playgroud)

有什么办法可以阻止Linq到Sql插入那个UNICODE()调用(从而失去了我对dogs.Active索引的好处)吗?我尝试使用EntityFunctions.AsNonUnicode()方法包装参数,但这没有用(它在生成的sql中将一个CONVERT()插入NVARCHAR而不是UNICODE()),例如:

...where d.Active.ToString() == EntityFunctions.AsNonUnicode('A'.ToString());
Run Code Online (Sandbox Code Playgroud)

.net c# linq-to-sql

13
推荐指数
1
解决办法
984
查看次数

Javascript 断点在 Visual Studio 2019 asp.net 应用程序中不起作用

我最近从 VS 2017 升级到了 VS 2019。

在 VS 2017 中,当在本地运行 asp.net 应用程序时,使用 Chrome,我可以在 javascript 代码中放置一个断点,调试器将在断点处停止。这不再适用于 Visual Studio 2019。

我需要做什么才能使用 Chrome 在 Visual Studio 2019 中启用 javascript 调试?我希望能够在 javascript 文件中放置断点并让它们命中。

这是我的设置。

  1. 我启用了 Javascript 调试。 在此处输入图片说明

  2. 我在我的 JavaScript 代码中放置了一个断点。此断点位于 *.js 文件中(不在 Razor 视图中)。

在此处输入图片说明

  1. 断点被忽略。Visual Studio 非常礼貌地向我展示了一个工具提示,告诉我断点将被忽略。

在此处输入图片说明

javascript visual-studio-debugging chrome-debugging visual-studio-2019

10
推荐指数
1
解决办法
1万
查看次数

配置IIS以返回404以进行目录浏览尝试

在IIS(6或7)中,当禁用目录浏览时,IIS在检测到尝试浏览目录时返回"403 - 禁止"错误(例如" http://mydomain.com/folder ").

有没有办法配置IIS以返回"404 - Not Found"错误而不是"403"用于目录浏览尝试?

这是一个asp.net webforms网站.

我们网站的安全扫描指出,返回"403"可以帮助恶意人员映射我们的网站; 之前没有想到这一点,但我不得不承认这是有道理的.

asp.net iis

9
推荐指数
2
解决办法
4504
查看次数

IE9中的Jquery 2.1.1获取错误:0x800a01b6 - Microsoft JScript运行时错误:对象不支持属性或方法'addEventListener'

使用Visual Studio 2013,我将混合的Asp.Net Webforms/MVC 3 Web应用程序迁移到Asp.Net Webforms/MVC 5.1.作为迁移的一部分,我使用NuGet包管理器将Jquery从1.9.1升级到2.1.1.

当我在Chrome中的Visual Studio 2013调试器中运行应用程序时,我没有问题.

当我在IE 9中的Visual Studio 2013调试器中运行应用程序(兼容模式未启用)时,首先加载具有这两个脚本标记的母版页:

<script src="/Scripts/jquery-2.1.1.js" type="text/javascript"></script>
<script src="/Scripts/jquery-ui-1.10.4.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

它失败了这个Javascript错误:

Unhandled exception at line 3425, column 4 in http://localhost:25378/Scripts/jquery-2.1.1.js 
0x800a01b6 - Microsoft JScript runtime error: Object doesn't support property or method 'addEventListener'
Run Code Online (Sandbox Code Playgroud)

我意识到Jquery 2不适用于IE 8及更低版本,但我找不到任何记录IE 9任何问题的文档.

该错误发生在jQuery.ready.promise函数内的jquery-2.1.1.js的第3425行:

document.addEventListener( "DOMContentLoaded", completed, false );
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我停止错误时,检查调试器中的文档对象并展开"方法"节点,我可以看到"addEventListener"方法.就好像Jquery没有权限看到这个方法.

我非常想升级到Jquery 2,从我读过的所有内容中,Jquery 2应该可以使用IE9.有关解决此问题的任何建议吗?

javascript jquery jquery-2.0 asp.net-mvc-5.1

7
推荐指数
2
解决办法
2万
查看次数

Asp.Net Core:我应该在缓存服务上使用 AddScoped 还是 AddSingleton

在 ASP.NET Core 应用程序中,我有一个依赖项注入的缓存服务,它本质上是内置 MemoryCache 的包装器。

下面是被缓存的示例类,它包含 Web 应用程序始终使用的一些枚举的列表:

public class GetEnums
{
    public List<MyEnum1> Ones { get; set; }
    public List<MyEnum2> Twos { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

下面是我的缓存服务类上的示例方法调用,它只是检索 GetEnums 类:

public class CacheService: ICacheService
{
    private IMemoryCache MemoryCache {get;set;}
    public CacheService(IMemoryCache memoryCache)
    {
        MemoryCache = memoryCache;
    }
    public GetEnums GetEnums()
    {
        if (MemoryCache.TryGetValue("GetEnums", out GetEnums getEnums))
            return getEnums;

        getEnums = MyRepository.GetEnums();
        MemoryCache.Set(CacheKeys.GetEnums, getEnums, _enumMemoryCacheEntryOptions);

        return getEnums;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的ConfigureServices 方法中,我想让此类成为依赖项注入服务。我应该使用 AddScoped 还是 AddSingleton?也就是说,我应该这样做吗?

services.AddScoped(<ICacheService,CacheService>);
Run Code Online (Sandbox Code Playgroud)

或这个?

services.AddSingleton(<ICacheService,CacheService>);
Run Code Online (Sandbox Code Playgroud)

我有两个问题。

一,如果我选择 AddScoped:我的猜测是,由于我的缓存服务类只是 …

c# caching asp.net-core

7
推荐指数
1
解决办法
5741
查看次数

.Net Core 5 控制台应用程序,在 Program.Main 中完成时不会加载环境的应用程序设置

我希望我的 .Net Core 5 控制台应用程序根据 DOTNET_ENVIRONMENT 环境变量从相应的 appsettings 文件中选择设置。我通过在 Visual Studio 2019 调试器中运行它并从 launchSettings.json 文件中获取环境来对此进行测试。

在 .Net Core 5 控制台应用程序中,我有 4 个“appsettings”文件:

  • 应用程序设置.json
  • appsettings.Development.json
  • appsettings.Staging.json
  • appsettings.Production.json

每个文件属性都设置为“构建操作:内容”和“复制到输出目录:如果较新则复制”。

在我的 launchSettings.json 中,我将环境设置为“Staging”,如下所示:

 {
  "profiles": {
    "MyAppName": {
      "commandName": "Project",
      "dotnetRunMessages": "true",
      "environmentVariables": {
        "DOTNET_ENVIRONMENT": "Staging"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要访问 Program.cs 中“Main”方法中的配置,因此在该类中我设置了一个模块级字符串变量“_environment”,如下所示在静态构造函数中:

_environment = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT");
Run Code Online (Sandbox Code Playgroud)

这有效;值“Staging”被加载到变量 _environment 中。

然后,我将配置加载到静态变量中,如下所示:(编辑 - 这是我的错误,假设此静态属性在静态构造函数之后加载。事实上,它在静态构造函数之前加载。这意味着未设置 _environment 变量,这意味着我的环境特定的应用程序设置文件从未加载)。

private static IConfiguration Configuration { get; } = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{_environment}.json", optional: true, …
Run Code Online (Sandbox Code Playgroud)

console-application appsettings .net-core .net-5

7
推荐指数
2
解决办法
7395
查看次数

调用SaveChanges()时排除属性更新

似乎有两种方法使用"attach"方法更新断开连接的Entity Framework实体.

方法一是简单地将断开连接的实体的状态设置为已修改:

myDbContext.Dogs.Attach(dog);
myDbContext.Entry(dog).State = EntityState.Modified;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这将保存"dog"对象上的所有字段.但是你说你是在一个mvc网页上做的,你只允许编辑Dog.Name,页面上唯一的Dog属性是Name.然后可以做方法二:

myDbContext.Dogs.Attach(dog);
myDbContext.Entry(dog).Property(o => o.Name).CurrentValue = dog.Name;
myDbContext.Entry(dog).Property(o => o.Name).IsModified = true;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

当有许多属性需要更新时,方法二可能会变得非常冗长.这促使我尝试方法三,在我不想改变的属性上设置IsModified = false.这不起作用,抛出运行时错误"不支持修改属性的设置IsModified为false":

myDbContext.Dogs.Attach(dog);
myDbContext.Entry(dog).State = EntityState.Modified;
myDbContext.Entry(dog).Property(o => o.Owner).IsModified = false;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我更喜欢在任何地方使用Method One,但是在很多情况下我的asp.net mvc视图不包含Dog类的每个标量属性.

我的问题是:

  1. 我可以在POCO类上使用哪些属性告诉Entity Framework我从不希望该属性更新?例如,[NeverUpdate].我知道[NotMapped]属性,但这不是我需要的.
  2. 如果失败了,有什么方法可以使用上面的方法一(myDbContext.Entry(dog).State = EntityState.Modified;)并排除我不想更新的字段?

PS我知道另一种方法,不使用"附加",只需从数据库中获取一个新对象,更新所需的属性,然后保存.这就是我正在做的事情,但我很好奇是否有一种方法可以使用"附加",从而避免额外的数据库访问,但这样做的方式不像上面的方法二那么冗长.通过"获取一个新鲜的对象"我的意思是:

Dog dbDog = myDbContext.Dogs.FirstOrDefault(d => d.ID = dog.ID);
dbDog.Name = dog.Name;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-framework

6
推荐指数
1
解决办法
7278
查看次数

System.Web.WebPages中的MethodAccessException将mvc 3迁移到mvc 5

使用Visual Studio 2013,我将混合的Asp.Net Webforms/MVC 3/Framework 4.0 Web应用程序迁移到Asp.Net Webforms/MVC 5.2.2/Framework 4.5.1.

我按照这些链接中列出的步骤操作:

http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and- Web的API-2

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/upgrading-signalr-1x-projects-to-20

当我在visual studio中运行应用程序时,我收到此错误:

尝试通过安全透明方法'System.Web.WebPages.Administration.SiteAdmin.RegisterAdminModule()'来访问安全关键方法'System.Web.WebPages.ApplicationPart..ctor(System.Reflection.Assembly,System.String)'失败.

我尝试过在StackOverflow上找到的这些建议,但没有解决问题:

  1. 清除bin文件夹并重建
  2. 安装Nuget包Microsoft.Aspnet.WebHelpers.
  3. 确保System.Web.Mvc和System.Web.WebPages的所有web.config引用都指向正确的版本(分别为5.2.2.0和3.0.0.0).

如何找到这个错误的原因的任何建议将非常感激.

错误的完整堆栈跟踪:

[MethodAccessException: Attempt by security transparent method 'System.Web.WebPages.Administration.SiteAdmin.RegisterAdminModule()' to access security critical method 'System.Web.WebPages.ApplicationPart..ctor(System.Reflection.Assembly, System.String)' failed.]
   System.Web.WebPages.Administration.SiteAdmin.RegisterAdminModule() +96
   System.Web.WebPages.Administration.PreApplicationStartCode.Start() +41

[InvalidOperationException: The pre-application start initialization method Start on type System.Web.WebPages.Administration.PreApplicationStartCode threw an exception with the following error message: Attempt by security transparent method 'System.Web.WebPages.Administration.SiteAdmin.RegisterAdminModule()' to access security critical method 'System.Web.WebPages.ApplicationPart..ctor(System.Reflection.Assembly, System.String)' failed..]
   System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures) +559
   System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-5

5
推荐指数
2
解决办法
5963
查看次数

如何使ASP.Net MVC控制器动作异步

我的愿望是创建一个MVC控制器Action,它可以异步执行长时间运行的i/o操作.我的目标是避免在这个长时间运行的方法完成时绑定ASP.Net线程池中的线程.

该行动打了两个电话.

第一个调用是第三方dll,它不包含任何异步方法.这个DLL从专有数据库读取并执行相当复杂的cpu绑定处理.返回可能需要几秒钟的时间.

第二个调用使用第一个调用的结果作为使用Entity Framework传递给数据库查询的参数.

简化,这是动作:

public async Task<ActionResult> MyActionAsync(arg1, arg2)
{
    var parameters = 3rdPartyComponent.TakesLongTime(arg1, arg2);

    Task<List<MyClass>> genericList = null;

    using (DbContexts.MyDbContext db = new DbContexts.MyDbContext())
        {
          genericList = await db.Database.SqlQuery<MyClass>(sql,parameters).ToListAsync();
        }

    return View("MyView", genericList);
}
Run Code Online (Sandbox Code Playgroud)

我想打电话给3rdPartyComponent等待.我最初的想法是这样做:

var parameters = await Task.Run(() => 3rdPartyComponent.TakesLongTime()).ConfigurateAwait(false);
Run Code Online (Sandbox Code Playgroud)

但我已经阅读了几位主题专家明确表示在asp.net MVC Action中使用Task.Run()会适得其反,永远不应该这样做.

3rdPartyComponent是一个黑盒子的编译代码,它不能改变添加异步方法.

是否有任何方法可以调用3rdPartyComponent,以便整个Action运行而不会占用asp.net线程池中的线程?

asp.net-mvc async-await

5
推荐指数
1
解决办法
1488
查看次数