我有一个用于 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 结果有更好的想法,我也对此持开放态度。