我有一个带有以下控制器的MVC4网络应用程序
[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
有一个操作,将标题作为部分视图返回,但未使用[AllowAnonymous]
修饰。在本地,它导致页面显示没有标题,但在Azure网站上,响应被切断,只返回上面提到的错误消息。在我故意调查它之前,我没有意识到标题丢失了。
现在问题有待提出:为什么Azure网站会覆盖响应?
答案 0 :(得分:4)
BaseController有一个动作,它将Header作为部分视图返回,该视图未使用[AllowAnonymous]进行修饰。在本地,它导致页面显示没有标题,但在Azure网站上,响应被切断,只返回上面提到的错误消息。在我故意调查它之前,我没有意识到标题丢失了。
现在问题有待提出:为什么Azure网站会覆盖响应?
答案 1 :(得分:2)
我遇到了完全相同的问题,就像Jonas的更新说的那样,你需要注意返回部分视图并具有[Authorize]属性的Actions。
您需要做的是删除[Authorize]属性,然后如果您的操作需要对用户进行身份验证才能正确呈现,请让您的代码处理未经授权的案例。
示例是您的页面是否通过Partial显示当前登录的用户名。如果当前登录的用户不可用,请让您的操作显示空字符串或其他内容。
答案 2 :(得分:1)
如果您有
,请检查您的web.config<authorization>
<deny users="?" />
</authorization>
其覆盖[AllowAnonymous]
添加到web.config部分:
<location path="YourController/AnonymousMethod">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
允许匿名访问AnonymousMethod