这是场景:
我有一个登录页面,当用户签名时,它会被重定向到主页应用程序页面.然后用户使用浏览器后退按钮,现在他在登录页面上.他尝试再次登录,但现在抛出异常:
HttpAntiForgeryException(0x80004005):提供的防伪令牌适用于用户"",但当前用户是"userName".
我知道这与缓存有关.我使用自定义NoCache过滤器禁用了浏览器缓存以进行登录操作,该过滤器设置了所有必需的标头 - 无缓存,无存储,必须重新验证等.但是
我将尝试制作黑客并强制Safari移动刷新,但这不是我所期待的.
我想知道我是否可以:
更新1
为了澄清一下,我知道如何处理MVC中的错误.问题是这个处理错误根本解决了我的问题.错误处理的基本思想是重定向到自定义错误页面,并带有好消息.但我希望防止发生此错误,而不是以用户可见的方式处理它.通过句柄我的意思是捕获用户名替换或其他合适的操作然后继续登录.
更新2
我添加了下面的解决方案,这对我有用.
我已经将xproj
核心项目迁移到了csproj
.一切都运行良好,但我仍然遇到发布配置问题.基于文档:https:
//docs.microsoft.com/en-us/dotnet/articles/core/tools/project-json-to-csproj我应该能够在发布期间排除文件.
我在f中添加了以下行
<None Include="*.json" CopyToPublishDirectory="Never" />
<None Include="wwwroot\**\*.map;wwwroot\**\*.less;*.pdb" CopyToPublishDirectory="Never" />
<None Include="wwwroot\**\*" CopyToPublishDirectory="PreserveNewest" />
Run Code Online (Sandbox Code Playgroud)
但仍然*.map
,.json
和.less
文件复制到发布文件夹.我试过不同的顺序没有运气.
如何从发布中排除某些文件?
我有4个文件:
它们以下列方式添加到bundle中:
bundles.Add(new StyleBundle("~/Content/acss").Include("~/Content/a.css", "~/Content/b.css"));
Run Code Online (Sandbox Code Playgroud)
在调试中运行应用程序时,所有正确呈现:
<link href="/Content/a.css" rel="stylesheet"/>
<link href="/Content/b.css" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
但是当在发行版中运行时,我会以下列方式呈现它:
<link href="/Content/acss?v=mUdXE7_fXKjICzE_XteIB1Igy6TekX1QFh-BtY6fFUw1" rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
在我的建立里面:
/*缩小失败.返回未经授权的内容.(24,708):运行时错误CSS1030:预期的标识符,找到'.'
所以我有两个问题:
当我输入以下代码时:
@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" }))
{
@Html.AntiForgeryToken()
<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
}
Run Code Online (Sandbox Code Playgroud)
该
@Html.AntiForgeryToken()
Run Code Online (Sandbox Code Playgroud)
部分被抛出以下异常:
提供的"System.Web.Security.FormsIdentity"类型的标识标记为IsAuthenticated = true,但没有Name的值.默认情况下,防伪系统要求所有经过身份验证的身份都具有唯一的名称.如果无法为此标识提供唯一的名称,请考虑将静态属性AntiForgeryConfig.AdditionalDataProvider设置为可为当前用户提供某种形式的唯一标识符的类型的实例.
我查了很多例子并尝试搜索网页,但我找不到任何解释.我想知道为什么这个错误发生在我身上?如何解决它使用防伪.
我创建了新项目并添加了最新的实体框架(版本4.3).我像以前的EF版本一样创建了类和上下文.但是,在第一次运行时应该创建数据库(在我的情况下是SQL Server 2005),我收到以下错误:
执行命令定义时发生错误.有关详细信息,请参阅内部异常
具有以下内部异常:
无效的对象名称'dbo .__ MigrationHistory'.
据我了解,此表适用于迁移,但如果没有数据库,则此表不存在.难道我做错了什么?
更多信息:出于测试目的,我只创建了一个类:
public class Test
{
[Key]
public int TestId { get; set;}
public string Name {get; set;}
}
public class Context : DbContext
{
public Context() : base("MyConnection")
{
}
public DbSet<Test> Tests { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
更新1
经过一些测试后,我意识到应用程序正在从视觉工作室抛出未处理的异常并在视觉工作室中中断.System.Data.EntityCommandExecutionException是一个例外.一旦我忽略了这个期望并且没有停止代码执行,就创建了数据库.
更新2
在使用数据库几个小时之后,我发现使用Enable-Migrations选项和来自控制台的Update-Database也正在解决这个问题.它在应用程序启动之前创建数据库,并且不会在Visual Studio中中断.
我在EF 6代码中有简单的表定义 - 首先是简单的外键.
public class Address
{
/// <summary>
/// Gets or sets the id.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
public int Id { get; set; }
/// <summary>
/// Gets or sets the town.
/// </summary>
public virtual Town Town { get; set; }
/// <summary>
/// Gets or sets the paf address town id.
/// </summary>
[Column(Order = 2)]
public int TownId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
创建表时,它正在创建外键和索引.我想知道为什么,因为这样的索引通常非常低效,而对于大型数据库,它会导致很多问题.那么为什么它只创建该索引而不是外键.以及如何默认禁用此类索引创建.
我试图删除特定Set-Cookie
的报头HttpResponseHeaders
中OnActionExecuted
的方法ActionFilter
.
我遇到的问题很少:
Set-Cookie
可以有多个条目.目前我正在删除所有cookie,但这不是我想要的.
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
HttpResponseHeaders headers = actionExecutedContext.Response.Headers;
IEnumerable<string> values;
if (headers.TryGetValues("Set-Cookie", out values))
{
actionExecutedContext.Response.Headers.Remove("Set-Cookie");
}
base.OnActionExecuted(actionExecutedContext);
}
Run Code Online (Sandbox Code Playgroud) 我在Startup中有两个全局异常过滤器
config.Filters.AddService(typeof(ExceptionFilter));
Run Code Online (Sandbox Code Playgroud)
和
config.Filters.AddService(typeof(JsonExceptionFilter));
Run Code Online (Sandbox Code Playgroud)
我总是觉得如果首先添加相同的过滤器,它首先执行.
但是当我ExceptionFilter
第一次添加时,它会被执行第二次.
更新1
ConfigureServices
方法:
services
.AddMvc(
config =>
{
config.Filters.AddService(typeof(ExceptionFilter));
config.Filters.AddService(typeof(JsonExceptionFilter));
});
Run Code Online (Sandbox Code Playgroud) 我正在研究波兰语操作系统:
在我的Statup.cs
班上,我有以下代码
// Configure the localization options
var supportedCultures = new[]
{
new CultureInfo("en-GB")
};
app.UseRequestLocalization(
new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-GB"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures,
FallBackToParentCultures = true,
FallBackToParentUICultures = true,
RequestCultureProviders = null
});
Run Code Online (Sandbox Code Playgroud)
完整选项仅供参考,以确保后面没有任何设置.在我的_Layout.cshtml
我有以下代码:
<div>Current Culture: @CultureInfo.CurrentCulture.DisplayName</div>
<div>Current UI Culture: @CultureInfo.CurrentUICulture.DisplayName</div>
Run Code Online (Sandbox Code Playgroud)
唯一受支持和可用的文化应该是en-GB
,但是在网站上它始终显示:
Current Culture: Polski (Polska)
Current UI Culture: Polski (Polska)
Run Code Online (Sandbox Code Playgroud)
我试图添加Microsoft.AspNet.Localization
包,但它没有任何区别.基于本地化中间件中的代码,所有应该按预期工作.我正在运行最新版本的ASP.NET Core 1.0.0.
我有MVC 5应用程序,它使用RazorGenerator.MVC和RazorGenerator.MsBuild.因此我的MvcBuildViews设置为false,因为不再需要它.该应用程序是Visual Studio 2012中的.NET 4.5.
当我使用Web发布工具发布我的应用程序时(右键单击MVC项目 - >发布),我在发布期间使用选项进行预编译.
当我使用任何CPU或x32平台时,一切都运行良好.但是,当我尝试发布x64应用程序时,我遇到了aspnet_compiler的问题.
它始终尝试使用:*C:\ Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe*一个而不是64个版本,因此我的应用程序无法使用x64平台发布.
我找到的唯一可以改变路径的地方是在MvcBuildViews目标下,但是因为它总是对我来说是假的,它永远不会达到这个目标而且不能使用AspNetCompiler ToolPath.
我想知道从哪里(哪个目标文件或任务文件)包含该路径?我搜索了所有我认为无法找到的目标.
尝试在Visual Studio 2017中运行测试时,所有都在编译时没有问题,但是当我尝试创建服务器和客户端进行测试时:
this.Server = new TestServer(
new WebHostBuilder()
.UseStartup<Startup>()
.UseContentRoot(di.FullName));
this.Client = this.Server.CreateClient();
Run Code Online (Sandbox Code Playgroud)
该TestServer
是抱怨错误的依赖(它会尝试加载版本1.0.0),即使TestHost
包是:
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.1" />
Run Code Online (Sandbox Code Playgroud)
测试失败也有异常:
Cannot find method: 'System.Net.Http.HttpClient Microsoft.AspNetCore.TestHost.TestServer.CreateClient()'..
Run Code Online (Sandbox Code Playgroud) c# ×7
asp.net-core ×4
asp.net-mvc ×4
.net ×1
.net-core ×1
64-bit ×1
cookies ×1
csproj ×1
localization ×1
msbuild ×1
publish ×1
unit-testing ×1