我能够在我的开发机器上运行我的应用程序,但是一旦我将它发布到Web服务器,一些功能就会丢失。任何类型的.ajax POST通常都不会发生401未经授权的错误。
服务器是带有IIS7的Windows 2008。我还在服务器上安装了带有MVC2的Visual Studio 2008,并直接在服务器上运行了应用程序,同样的.ajax POST不起作用,但错误更改为500个未知。
感谢您的帮助。
答案 0 :(得分:2)
我认为您需要Ajax请求的自定义ASP.NET MVC授权属性
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result == null || (filterContext.Result.GetType() != typeof(HttpUnauthorizedResult)
|| !filterContext.HttpContext.Request.IsAjaxRequest()))
return;
var redirectToUrl = "/login?returnUrl=" + filterContext.HttpContext.Request.UrlReferrer.PathAndQuery;
filterContext.Result = filterContext.HttpContext.Request.ContentType == "application/json"
? (ActionResult)
new JsonResult
{
Data = new { RedirectTo = redirectToUrl },
ContentEncoding = System.Text.Encoding.UTF8,
JsonRequestBehavior = JsonRequestBehavior.DenyGet
}
: new ContentResult
{
Content = redirectToUrl,
ContentEncoding = System.Text.Encoding.UTF8,
ContentType = "text/html"
};
//Important: Cannot set 401 as asp.net intercepts and returns login page
//so instead set 530 User access denied
filterContext.HttpContext.Response.StatusCode = 530; //User Access Denied
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
答案 1 :(得分:0)
如果您使用的是jquery,您确定要求的数据与您的应用在同一个域中吗?如果您没有这方面的解决方法jQuery Forum post:
答案 2 :(得分:0)
答案 3 :(得分:0)
答:看起来我发现了我的问题。
在我的控制器中,我有以下方法:
[JsonFilter(Param = "course", JsonDataType = typeof(EmployeeSearchItem))]
public ActionResult ViewCourseByID(EmployeeSearchItem course)
{
...}
EmployeeSearchItem是一个自己的.cs文件中的类:
namespace EducationAssistanceMVC.Models
{
public class EmployeeSearchItem //: Controller
{
public string empIDSearch { get; set; }
...}
我的解决方案是在EmployeeSearchItem.cs文件中注释掉上面的Controller继承,并注释掉任何Using
指令。