7

我有一个带有以下控制器的 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.Authorize并且System.Web.Mvc.AllowAnonymous结果相同。

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

更新:BaseController一个操作将 Header 作为未装饰的部分视图返回[AllowAnonymous]。在本地,它导致页面显示时没有标题,但在 Azure 网站上,响应被切断,仅返回上述错误消息。直到我故意查看它之前,我才意识到标题丢失了。

现在需要问一个问题:为什么 Azure 网站会覆盖响应?

4

3 回答 3

4

BaseController 有一个动作,它以未用 [AllowAnonymous] 修饰的局部视图返回 Header。在本地,它导致页面显示时没有标题,但在 Azure 网站上,响应被切断,仅返回上述错误消息。直到我故意查看它之前,我才意识到标题丢失了。

现在需要问一个问题:为什么 Azure 网站会覆盖响应?

于 2015-08-07T15:19:40.853 回答
2

我遇到了完全相同的问题,就像 Jonas 的更新所说,您需要注意返回部分视图并具有 [Authorize] 属性的操作。

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

例如,如果您的页面通过 Partial 显示当前登录的用户名。如果当前登录的用户不可用,则让您的操作显示空字符串或其他内容。

于 2014-05-21T10:30:42.643 回答
1

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

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

其覆盖 [AllowAnonymous]

添加到 web.config 部分:

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

允许对 AnonymousMethod 进行匿名访问

于 2017-07-18T13:00:54.157 回答