2

我有一个用于 Ajax 请求的自定义授权属性:

public class AjaxAuthorize : AuthorizeAttribute {
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) {
        UrlHelper urlHelper;

        if (filterContext.HttpContext.Request.IsAjaxRequest()) {
            urlHelper = new UrlHelper(filterContext.RequestContext);

            filterContext.HttpContext.Response.StatusCode = 401;
            //Return JSON which tells the client where the login page exists if the user wants to authenticate.
            filterContext.HttpContext.Response.Write(new JavaScriptSerializer().Serialize(
                new {
                    LoginUrl = string.Format("{0}?ReturnURL={1}", FormsAuthentication.LoginUrl, urlHelper.Encode(filterContext.HttpContext.Request.Url.PathAndQuery))
                }
            ));
            filterContext.HttpContext.Response.End();
        } else {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

当我在本地运行应用程序时,我会从 Ajax 请求中返回 JSON 结果。但是,当我将代码放在我的 beta 服务器上时,我最终得到了 IIS 401 HTML 响应。

有没有人看到我的代码有问题,只能在本地主机上工作?此外,如果有人对返回 JSON 结果有更好的想法,我也对此持开放态度。

4

1 回答 1

4

StackOverflow 有一些奇怪的力量,导致 OP 在发布后以不同的方式思考问题。我会在这里留下我的答案,希望它可能对其他人有所帮助。

我突然想到 IIS7 妨碍了我。我通过添加一行代码解决了这个问题:

filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
于 2012-08-31T16:59:07.550 回答