【发布时间】:2016-02-25 12:40:50
【问题描述】:
几天前 .NET Core RC1 发布了,在阅读了很多关于它的内容后,我第一次尝试了它,我喜欢它,但它有点不同。我正在尝试将一个小型博客(内置于 MVC5)迁移到 MVC 6 和 .NET Core。这并不难,但我真的很难重新创建与 MVC 5 中完全相同的 global.asax 设置,ASP.NET 5 不再有 global.asax 所以我无法弄清楚大多数设置的替代品是?
protected void Application_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
MvcHandler.DisableMvcResponseHeader = true;
AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
BundleConfig.RegisterBundles(BundleTable.Bundles);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
protected void Application_BeginRequest()
{
Response.AddHeader("X-Frame-Options", "DENY");
}
protected void Application_EndRequest()
{
if (Response.StatusCode != 301 && Response.StatusCode != 302) return;
var targetUrl = Response.RedirectLocation.Replace("ReturnUrl", "url");
Response.RedirectLocation = targetUrl;
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
string typeName;
byte userType = (byte)(Context.Request.IsAuthenticated ? byte.Parse(User.Identity.Name.Split('|')[2]) : 1);
switch (userType)
{
case 1: { typeName = "Client"; break; }
case 2: { typeName = "Admin"; break; }
default: { typeName = "Client"; break; }
}
var roles = new[] { typeName };
if (Context.User != null)
{
Context.User = new GenericPrincipal(Context.User.Identity, roles);
}
}
private void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpAntiForgeryException)
{
Response.Clear();
Server.ClearError();
Response.Redirect("/error/cookie", true);
}
}
请问,有没有办法让上述代码在 MVC 6 中工作而无需离开任何设置?这对我来说是一个交易破坏者,谢谢。
【问题讨论】:
-
将这段代码放在 github repo 上并在转换后与 MVC 6 项目并排放置将是一个有趣的实验。如果您最终推送代码,请告诉我,我想看看它的外观以及移植它需要什么。
-
您可以做您在 global.aspx 中所做的所有事情,但需要使用定制的中间件。在 asp.net core 中制作中间件也很容易。 andrewlock.net/adding-default-security-headers-in-asp-net-core
标签: c# asp.net asp.net-mvc asp.net-core .net-core