繁体   English   中英

为什么AllowAnonymous在部署到Azure网站时不起作用?

[英]Why is AllowAnonymous not working while deployed to Azure Websites?

我有一个带有以下控制器的MVC4 Web应用程序

[Authorize]
public class AccountController : BaseController
{
  [AllowAnonymous]
  public ActionResult SignInRegister(LoginModel loginModel, string returnUrl)
  {
    //some implementation
  }
  //other secured actions
}

这在本地运行时按预期工作,但是一旦我将其部署到Free Azure网站,我就会收到401错误代码并显示以下消息: You do not have permission to view this directory or page.

删除[Authorize]属性并重新部署按预期工作,再次添加并重新部署会带来问题。

我甚至尝试了完全限定的类名: System.Web.Mvc.AuthorizeSystem.Web.Mvc.AllowAnonymous ,结果相同。

该应用程序使用的是.NET 4.5,Azure网站也配置为使用4.5。

更新: BaseController有一个动作,将Header作为部分视图返回,该视图未使用[AllowAnonymous]修饰。 在本地,它导致页面显示没有标题,但在Azure网站上,响应被切断,只返回上面提到的错误消息。 在我故意调查它之前,我没有意识到标题丢失了。

现在问题有待提出:为什么Azure网站会覆盖响应?

BaseController有一个动作,它将Header作为部分视图返回,该视图未使用[AllowAnonymous]进行修饰。 在本地,它导致页面显示没有标题,但在Azure网站上,响应被切断,只返回上面提到的错误消息。 在我故意调查它之前,我没有意识到标题丢失了。

现在问题有待提出:为什么Azure网站会覆盖响应?

我有完全相同的问题,就像Jonas的更新说的那样,你需要注意返回部分视图并具有[Authorize]属性的Actions。

您需要做的是删除[Authorize]属性,然后如果您的操作需要对用户进行身份验证才能正确呈现,请让您的代码处理未经授权的案例。

例如,您的页面是否通过“部分”显示当前登录的用户名。 如果当前登录的用户不可用,请让您的操作显示空字符串或其他内容。

如果有,请检查您的web.config

<authorization>
  <deny users="?" />
</authorization>

它的覆盖[AllowAnonymous]

添加到web.config部分:

<location path="YourController/AnonymousMethod">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

允许匿名访问AnonymousMethod

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM