我一直在浏览开发项目的错误日志,发现以下错误(更改名称以保护有罪的无辜者) -
提供的防伪令牌适用于用户"",但当前用户为"admin".
这不是一个特别难以复制的问题 -
堆栈跟踪是 -
System.Web.Mvc.HttpAntiForgeryException(0x80004005):提供的防伪令牌适用于用户"",但当前用户为"admin".在System.Web.Helpers.AntiForgery的System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext,IIdentity identity,AntiForgeryToken sessionToken,AntiForgeryToken fieldToken)中的System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext).在System.Web.Mvc.Mvc.Asvoke.Av响应(SystemContext控件),System.Web.Mvc.AsvokeAuthorizationFilters(ControllerContext controllerContext,IList`1过滤器,ActionDescriptor actionDescriptor)的System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext)中验证(),System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass25.
登录方法签名是 -
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这与互联网"ASP.NET MVC 4 Web应用程序"模板化项目中的方法签名完全相同,这表明Microsoft认为ValidateAntiForgeryToken是必要/最佳实践,或者只是在此处添加了属性,因为它已被使用在其他地方.
显然,我无法在此方法中处理问题,因为它没有到达,ValidateAntiForgeryToken是一个预请求过滤器,它在阻止请求到达控制器之前.
在提交表单之前,我可以检查用户是否通过Ajax进行了身份验证,如果是,则尝试重定向到这些用户,或者只是删除该属性.
问题是这个 - 我理解该令牌的设计是为了防止来自另一个站点(CSRF)的请求,当用户已经针对您的站点进行了身份验证时,所以基于这个问题将它从表单中删除是一个问题,根据定义将使用它未经验证的用户?
据推测,此实例中的属性旨在缓解为您的应用程序提供虚假登录表单的恶意行为者(尽管在抛出异常时可能已经输入了他或她已经记录的详细信息 - 但它可能会提醒他们某些事情是错的).否则,从外部站点向表单提交不正确的凭据将导致与站点本身完全相同的结果?我不依靠客户验证/卫生来清理可能不安全的输入.
让其他开发人员遇到此问题(或者我们是否拥有异常富有创意的用户)如果是这样,您如何解决/减轻它?
更新:此问题在MVC5中仍然存在,完全是故意的,现在出现错误消息"提供的防伪令牌是针对与当前用户不同的基于声明的用户".使用默认模板和身份提供程序时.Microsoft Developer Evangelist和Troy的同事PluralSight作者Adam Tuliper在登录页面上的Anti forgery 令牌中提出了一个相关的问题和有趣的答案,建议只需删除令牌.
我最近开始看到Chrome开发工具中的一个常见错误,当右键单击元素以选择"检查元素"时 - 而不是选择" 元素"选项卡上的元素错误"未捕获错误:参数2(消息) "是必需的. "出现在虚拟"extensions :: schemaUtils"脚本的"Sources"选项卡中.
根据下面的屏幕截图,函数"validate"中会出现错误.
自从安装"OneTab"扩展程序后,似乎会发生此错误,并且在禁用它时确实会消失.我已向扩展作者报告,到目前为止没有回复.不幸的是,由于工作已经适合向我发出动力不足的机器,因此移除OneTab不是一种选择,因为内存在非常短的时间内运行.
这个问题很容易复制,在Stack Overflow中,单击左上角的"StackExchange"图标,然后右键单击其中一个"Your Communities"项.上下文菜单未打开,并显示上述错误.这也会影响我正在处理的主要产品上的弹出菜单.
此错误只发生在Chrome的一个实例,这恰好是我的主要开发者机器,一点没有在同一台计算机上的Chrome Canary发生,并且安装了相同的扩展.
Windows 7 Professional,Service Pack 1,x64笔记本电脑上的Chrome 37.0.2024.2m.
我有一个损坏的Chrome副本吗?其他用户是否可以复制此错误(使用或不使用OneTab扩展程序)?是否有任何不足以永久删除扩展,我可以做什么来恢复必要的"检查元素"功能?
我已尝试在设置菜单中重置Chrome.
google-chrome google-chrome-extension google-chrome-devtools
我试图将ASP.NET Identity合并到一个新的应用程序中,该应用程序当前使用SQL脚本来创建数据库模式.由于我们需要从其他表创建外键约束到用户表,因此非常希望ASP.NET标识表也在相同的脚本中创建.
我已经能够在IdentityModels.cs中创建的ApplicationUser类中扩展IdentityUser类
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
Sequence = 0;
LastActivity = DateTime.Now;
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int NumericId
{
get;
set;
}
[MaxLength(50), Required]
public string DisplayName
{
get;
set;
}
[MaxLength(50), Required]
public string Description
{
get;
set;
}
[IntegerValidator(MinValue = 0), Required]
public int Sequence
{
get;
set;
}
[MaxLength(50)]
public string ExternalRef
{
get;
set;
}
public DateTime? LoggedOn
{
get;
set;
}
public DateTime? LoggedOff
{
get;
set;
}
public DateTime …
Run Code Online (Sandbox Code Playgroud) 几周以来,当从Visual Studio Team Services获取源代码时,我无法在Visual Studio 2013中合并Views以响应冲突.我相信我曾经能够做到这一点(我们最近从Visual Studio Professional 2012转移到了我不能百分之百确定 - 在项目的早期阶段,自动化可能已经足够了).
"接受合并"并转到下一个更改/冲突按钮都是灰色且不可操作的.见截图摘要 -
这最初只发生在Views中,但现在似乎影响了其他一些类.更改会在滚动条上突出显示并显示,因此diff工具似乎正在运行.这最初只影响了我,但现在影响了一个新同事进入团队.
我仍然可以保留本地版本或服务器版本,但这很少.这使我手动更改本地副本以应用合并工具突出显示的更改.(编辑 - 请参阅下面的"第二次更新"中的更好的解决方法).
有没有人遇到过这个?
Visual Studio 2013 Premium(补丁RTM/Update 1/Update 2 - 都具有相同的问题),安装了Resharper 8.2(最初为8.0.2)C#和Web Essentials.在Windows 7 Professional x64上运行.
项目是ASP.NET 4.5使用MVC 5.1.2(现在从MVC 5另外更新出现问题)(使用ASP.NET网站上的升级说明从MVC 4 升级)在C#中,使用最新版本的Razor(3.1 .2)和实体框架(6.1.0 RTM).
编辑:最初Visual Studio 2013的修复安装似乎已修复此问题.然而它现在已经完全像以前一样返回了.由于花了一个小时进行修复,我无法重复执行此操作以合并视图.我目前能够在Visual Studio 2012 Update 4和Visual Studio 2013之间完成解决方案,以便在Visual Studio 2012中进行正常工作的合并.
第二次编辑:我目前通过选择所需的代码(本地/服务器),保存合并窗口然后关闭它来手动解决冲突,这将提示接受合并结果.这似乎起作用,但显然是次优的.然而,它可能对其他用户有帮助.
我目前正在编写一个现有(Delphi)基于桌面的软件产品的ASP.NET MVC 4 Web版本(使用Razor视图引擎),该产品目前允许客户(企业)完全自定义其实例中的所有文本.应用程序,既可以本地化,也可以根据特定环境进行自定义.
例如,条款─
可能会改变为业务中使用的个别术语.
目前,这种自定义只是在存储在应用程序数据库中的文本字符串中完成,并在Delphi数据库中的每个表单加载中进行比较和加载.即,将表单上的每个字符串与数据库英语字符串进行比较,并在表单上呈现基于所选语言环境的替换(如果可用).我觉得这不是可扩展的,也不是特别高效的.
我也不熟悉在本地化方法中发生定制的想法,应用程序中的每个字符串都可以由最终客户更改 - 它可能导致文本一致性方面的支持问题,以及指令不正确的混淆更改或未更新.应用程序中有许多字符串,除了将它们本地化为用户的语言环境(本地语言和/或格式约定)之外,可能不应该更改.
我个人宁愿坚持使用RESX资源文件和资源键而不是字符串匹配来本地化应用程序的Web版本的ASP.NET API和约定.这比字符串匹配要灵活得多,其中字符串可能具有不同的上下文或大小写,并且不能简单地进行大量更改(许多英语单词在不同的上下文中可能具有不同的含义,并且可能不会在其他上下文中映射到相同的含义集)语言),关键是避免往返数据库以获取获取页面所需的字符串,并且还允许使用围绕标准RESX文件的大量工具轻松进行转换.这也意味着不需要自定义实现来维护或记录未来的开发人员.
然而,这确实给出了我们如何处理这些自定义术语的问题.
我目前正在考虑我们应该为这些术语设置单独的RESX文件,其中列出了给定语言环境的默认值.然后我会创建一个新的数据库表,就像这样
CREATE TABLE [dbo].[WEB_CUSTOM_TERMS]
(
[TERM_ID] int identity primary key,
[COMPANY_ID] int NOT NULL, -- Present for legacy reasons
[LOCALE] varchar(8) NOT NULL,
[TERM_KEY] varchar(40) NOT NULL,
[TERM] nvarchar(50) -- Intentionally short, this is to be used for single words or short phrases
);
Run Code Online (Sandbox Code Playgroud)
这可能会在需要时读入Dictionary <string,string>并由IIS缓存以提供查找,而不会延迟连接到SQL Server并执行查询.
public static class DatabaseTerms
{
private static string DictionaryKey
{
get { …
Run Code Online (Sandbox Code Playgroud) 我在BundleConfig.cs中定义了以下ScriptBundle-
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/js/yepnope").Include(
"~/Scripts/yepnope.{version}.js"));
}
}
Run Code Online (Sandbox Code Playgroud)
它实际上并不是唯一的捆绑包,但这就是与问题相关的所有内容 - 其余的只是其他捆绑定义.
当处于web.config中设置的"调试"模式时
<compilation debug="true" targetFramework="4.5">
Run Code Online (Sandbox Code Playgroud)
脚本的完整版本和缩小版本都会发送到浏览器 -
<script src="/Scripts/yepnope.1.5.4-min.js"></script>
<script src="/Scripts/yepnope.1.5.4.js"></script>
Run Code Online (Sandbox Code Playgroud)
使用HTML帮助程序添加脚本,如此 -
@section HeadScripts
{
@Scripts.Render("~/js/yepnope")
}
Run Code Online (Sandbox Code Playgroud)
这是在Windows 7 Professional 64位上的Visual Studio 2012中运行的MVC4项目.
无论我做什么,我都无法使{version}通配符按照Microsoft文档中的描述行事-
注意:除非EnableOptimizations为true或Web.config文件中的编译元素中的debug属性设置为false,否则不会捆绑或缩小文件.此外,将不使用.min版本的文件, 将选择完整的调试版本.
对于ASP.NET MVC 4,这意味着使用调试配置,文件jquery-1.7.1.js将添加到包中.在发布配置中,将添加jquery-1.7.1.min.js.捆绑框架遵循几个常见的约定,例如:
- 当存在"FileX.min.js"和"FileX.js"时,选择".min"文件进行发布.
- 选择非".min"版本进行调试.
- 忽略仅由IntelliSense使用的"-vsdoc"文件(例如jquery-1.7.1-vsdoc.js).
上面显示的{version}通配符匹配用于在Scripts文件夹中使用适当版本的jQuery自动创建jQuery包.在此示例中,使用通配符可提供以下好处:
- 允许您使用NuGet更新到更新的jQuery版本,而无需在视图页面中更改前面的捆绑代码或jQuery引用.
- 自动选择调试配置的完整版本和发布版本的".min"版本.
如果我添加"EnableOptimizations",它似乎表现得如预期的那样.
有没有人注意到这个或找到了解决方案?
在我正在使用Excel产品的产品中,使用Delphi的OLE生成电子表格.电子表格包含许多日期,其中应用程序从系统设置加载短日期格式并将其应用于单元格.除非系统格式设置为至少俄语,巴什基尔语,塔塔尔语,雅库特语,哈萨克语和乌兹别克语之一(可能还有其他我没有尝试过),否则这种方法很有效.
代码是 -
xlws.Cells[irow,icol] := ActivityData.Target_Date;
xlvalidrange := xlws.Range[xlws.Cells[irow,icol],xlws.Cells[irow,icol]];
xlvalidrange.NumberFormat:= LocShortDateFormat;
Run Code Online (Sandbox Code Playgroud)
在这种情况下(在调试时),ActivityData.Target_Date是41192,这是Excel存储日期和时间的格式,LocShortDateFormat等于'dd.MM.yyyy'.这与Windows中显示的俄语存储日期格式相匹配,并使用代码以编程方式检索 -
LocShortDateFormat := ShortDateFormat;
Run Code Online (Sandbox Code Playgroud)
使用此格式打开电子表格会显示消息 -
Excel在Spreadsheet.xlsx中找到不可读的内容您要恢复此工作簿的内容吗?
这样做的数据简单地显示为单元格中的NO,格式为41192.更奇怪的是,手动应用格式字符串'dd.MM.yyyy'然后在单元格中显示'dd.MM.yyyy'代替数据.
这同样适用于任何标准日期/时间字符串格式化字符.通过选择"日期"类别和相应类型作为格式,可以手动将数据更改为日期格式,然后正确显示,因此这不是数据问题,而是格式字符串.
当手动选择正确的日期格式时,Excel使用的格式字符串是ДД.ММ.ГГГГ - 手动更改调试时使用的格式字符串会在生成的电子表格中生成正确的输出,并且不可读的内容消息将消失.
奇怪的是,中文,日文,塞尔维亚文和马其顿文(作为非英文字符集语言的样本)都使用标准的日期/时间格式字符.
在Excel本身,标准字符似乎无法正常运行,即使电子表格是新的并且尚未以编程方式创建,即从Excel应用程序中创建的新电子表格.
在这种情况下,它似乎不是一个Delphi或Windows问题(C#Windows表单没有问题使用标准字符正确格式化日期,即使使用俄语语言环境),但它仍然留下如何返回正确格式的问题Delphi中的字符串.
我并不热衷于做一系列有条件的"if"语句测试已知有问题的语言环境,但这似乎是基于我迄今为止所做的研究来处理问题的唯一方法.
有没有办法要求Excel通过OLE使用本地日期格式而不提供格式化字符串,或者获取Excel用于格式化本地化日期的字符串以便以正确的格式提供字符串?
我从一个窗口有一个html表.我通过使用得到了表
var table = document.getElementById('tableId');
Run Code Online (Sandbox Code Playgroud)
然后我用以下方法打开另一个窗口:
window.open('newWindow.html');
Run Code Online (Sandbox Code Playgroud)
在这个窗口中,有一个id = divId的div.
现在,如果我尝试通过以下代码从其他窗口追加表:
var cloneTable = jQuery.extend(true, {}, window.opener.table);
var div = document.getElementById('divId');
div.appendChild(cloneTable);
Run Code Online (Sandbox Code Playgroud)
Internet Explorer将抛出此错误:
SCRIPT5022:HierarchyRequestError
我已经搜索了错误代码,如下所示:
http://msdn.microsoft.com/en-us/library/ie/gg592979(v=vs.85).aspx
它说我无法在该位置插入节点.但是,上面的代码在Firefox和Chrome中运行良好.
这里发生了什么以及如何解决这个问题?
谢谢,
PS:我正在使用IE 10
我正在使用带有getUserMedia的相机,我得到了一些我想修复的错误.事情是Visual Studio只允许我用IE调试JavaScript(我的意思是命中断点),IE不支持getUserMedia.
是否可以选择事先未知列名称的实体的不同属性值 - 由方法作为来自客户端的字符串接收.
出于过滤目的,我想从浏览器向服务器发出HTTP POST Ajax请求,该请求将包含字段名称作为密钥,这将作为字符串提供给服务器.
我知道我将不得不手动映射ViewModel和Entity Framework使用的POCO类之间的任何差异,但是可以构造一个没有强类型属性的实体框架查询 - 例如使用反射.
我可能会尝试实现这一点,其中数据由控制器确定,调用基本存储库的泛型方法,实体类作为类型.这是可能的还是我需要为每个可能的字段构建一个方法?
同样,我应该尝试这样做,还是用字段作为参数构建ADO.NET SQL命令(从ViewModel映射到SQL列名称)?
我被要求为我工作的组织编写一个文档管理系统,它提供了一系列与不同记录相关的九个不同的工作流程.其中的工作流程是将文档添加到"文件"或记录中,并根据业务规则将这些文档的子集发布到公共网站.
这些文件几乎无一例外地以PDF格式存在,并且通常在任何一个记录中,在任何一个时间处理的文件少于二十个.
将此作为Web应用程序构建的主要原因是将文件保留在我们的数据中心和高速交换机上,而不是通过远程站点上可能较慢的连接速度来尝试在位置之间复制和备份.
该系统运行良好,直到更大系列的文件(114个PDF文件,大小总共329MB)超过95%的时间.
代码是(IncomingDocuments类型为List <FileInfo>) -
List<string> filesSuccessfullyAdded = new List<string>();
foreach (FileInfo incomingFile in IncomingDocuments)
{
FileOperations.AddDocument(incomingFile, false, ApplicationCode, (targetDirectoryPath.EndsWith(@"\") ? targetDirectoryPath : targetDirectoryPath + @"\"));
FileInfo copiedDocument = new FileInfo(Path.Combine(targetDirectoryPath, incomingFile.Name));
if (copiedDocument.Exists && copiedDocument.Length == incomingFile.Length && copiedDocument.LastWriteTime == incomingFile.LastWriteTime)
{
filesSuccessfullyAdded.Add(copiedDocument.Name);
}
}
if (filesSuccessfullyAdded.Any())
{
SetupConfirmationLiteral.Text += "<p class='info'>The following files have been successfully added to the application file-</p>";
XDocument successfullyAddedList = new XDocument(
new XElement("ul", new XAttribute("class", "documentList")));
foreach (string successfulFile in filesSuccessfullyAdded) …
Run Code Online (Sandbox Code Playgroud) c# ×3
asp.net ×2
asp.net-mvc ×2
delphi ×2
javascript ×2
localization ×2
asynchronous ×1
azure-devops ×1
browser ×1
code-first ×1
debugging ×1
excel ×1
html ×1
jquery ×1
linq ×1
merge ×1
ole ×1
sql-server ×1
timeout ×1
webforms ×1