Asp.net mvc ASP.NET MVC 5[授权]属性正在浏览器中生成登录弹出窗口,而不是重定向到302登录页面
我以前从未见过这种情况:我用一个Asp.net mvc ASP.NET MVC 5[授权]属性正在浏览器中生成登录弹出窗口,而不是重定向到302登录页面,asp.net-mvc,controller,http-status-code-401,http-status-code-302,authorize-attribute,Asp.net Mvc,Controller,Http Status Code 401,Http Status Code 302,Authorize Attribute,我以前从未见过这种情况:我用一个[Authorize(Roles=“Admin”]属性装饰了一个控制器,但不是通过302重定向将未注册/未签名的用户发送到登录视图,而是在Chrome浏览器中出现一个javascript生成的登录提示: 在输入他或她的凭据后,用户将收到一个401错误。关于SO for和Web.Config中的建议不会改变此行为。我以前使用完全相同的控制器、参考库等创建过另一个项目,从未遇到过这种不希望出现的行为 我现在最大的盲点是是否存在某种OWIN冲突。为了观察我的应用程序在
[Authorize(Roles=“Admin”]
属性装饰了一个控制器,但不是通过302重定向将未注册/未签名的用户发送到登录视图,而是在Chrome浏览器中出现一个javascript生成的登录提示:
在输入他或她的凭据后,用户将收到一个401错误。关于SO for和Web.Config中的建议不会改变此行为。我以前使用完全相同的控制器、参考库等创建过另一个项目,从未遇到过这种不希望出现的行为
我现在最大的盲点是是否存在某种OWIN冲突。为了观察我的应用程序在启动时的行为,我在app.UseCookieAuthentication()
方法中创建了一个测试变量,并设置了一个断点。我在调试期间观察到根本没有调用此方法(请参阅下面的完整代码块):
以下是应返回登录视图的AccountController:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
有什么帮助吗
更新:从现在起,我只想拼凑一个自定义授权属性,尽管这对于生产来说是不可取的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace PortfolioSite.Framework
{
public class SiteAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.HttpContext.Response.Redirect("/Account/Login");
}
}
}
web配置应该覆盖IIS express配置,但在本例中似乎没有覆盖。您可以尝试在IIS级别将其关闭 您可以转到此目录\IISExpress\config\applicationhost.config打开此文件并设置
<windowsAuthentication enabled="false" />
这是内部网(窗口身份验证)应用程序?不,只是一个通用的MVC 5 Web应用程序。看起来你答案中的最后一句话被打断了。@Kanapolis抱歉,修复了它感谢回复。了解有关修改IIS设置的更多信息总是很好。检查了applicationhost.config,并且
已经设置好了…它在所有浏览器中都会发生吗?发生在IE中。我的环境中没有Firefox安顿。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace PortfolioSite.Framework
{
public class SiteAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.HttpContext.Response.Redirect("/Account/Login");
}
}
}
<windowsAuthentication enabled="false" />