开发期间绕过或关闭?

构建MVC3应用程序,TPTB希望我们使用他们的自定义授权提供程序。 但是,在开发过程中,这个身份validation提供程序很麻烦,因为它会在关闭/重新启动浏览器时发出错误,或者需要您在每次编译时重新记录o。

现在,我刚刚将到web.config中,这可以正常工作,直到遇到使用[Authorize(Roles = "Admin")]filter的操作或控制器(它可以是任何角色,而不仅仅是Admin)。 当它击中其中一个时,它只会呈现一个空白页面。

全球有没有办法暂时关闭这些filter? 或者只是在我开发过程中为用户提供所有角色?

编辑

让我澄清一下 – 我实际上正在将一个大型应用程序从MVC2移植到MVC3。 它有很多[Authorize(Roles="Admin")][Authorize(Roles="Admin,Editor")] 。 如果可能的话,我宁愿不改变所有这些。

我应该创建一个自动提供所有角色的小型自定义角色提供程序吗?

您可以编写自定义授权filter,如果请求来自localhost ,则不会执行任何检查:

 public class MyAuthorizeAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { if (httpContext.Request.Url.IsLoopback) { // It was a local request => authorize the guy return true; } return base.AuthorizeCore(httpContext); } } 

您可以从AuthorizeAttributeinheritance并使用#if DEBUG指令单独实现。

 public class MyAuthorizeAttribute: AuthorizeAttribute { #if DEBUG protected override bool AuthorizeCore(HttpContextBase httpContext) { return true; } #endif } 

或者#define YOUR_OWN_FLAG在任何构建,调试或发布中打开和关闭行为。

对于Web API:

 public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute { protected override bool IsAuthorized(HttpActionContext actionContext) { return actionContext.Request.RequestUri.IsLoopback || base.IsAuthorized(actionContext); } }