我能够在我的开发机器上运行我的应用程序,但只要我将它发布到Web服务器,一些功能就会丢失。任何类型的.ajax POST通常不会有401未经授权的错误。MVC应用程序不能在服务器上运行,但在开发机器上运行良好
服务器是Windows 2008与IIS7。我还在服务器上安装了MVC2的Visual Studio 2008,并直接在服务器上运行应用程序,并且相同的.ajax POST不起作用,但错误更改为500未知。
感谢您的帮助。
我能够在我的开发机器上运行我的应用程序,但只要我将它发布到Web服务器,一些功能就会丢失。任何类型的.ajax POST通常不会有401未经授权的错误。MVC应用程序不能在服务器上运行,但在开发机器上运行良好
服务器是Windows 2008与IIS7。我还在服务器上安装了MVC2的Visual Studio 2008,并直接在服务器上运行应用程序,并且相同的.ajax POST不起作用,但错误更改为500未知。
感谢您的帮助。
如果你正在使用jQuery,你确定你正在请求与你的应用程序位于同一个域的数据吗?如果不存在这个jQuery Forum post:
是的,他们都在同一个域名。 – 2010-04-14 17:45:06
的解决方法,我认为你需要一个自定义的ASP.NET MVC授权属性对于Ajax请求
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;
}
}
谢谢你我在哪里放置这个类 – 2010-04-14 17:58:19
如果你没有授权过滤器,你不需要为它们设置一个特殊的Ajax过滤器。您是否使用授权过滤器来装饰控制器或动作? – 2010-04-14 20:09:23
我曾经有过这个问题。当您致电您的ajax服务时,请务必使用相关网址。
www.mysite.com/myservice
是不一样
mysite.com/myservice
从
www.mysite.com
所以打电话时,调用该服务时,你应该用的是:
/myservice
答:看起来我发现我的问题。
在我的控制器,我有以下方法:
[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
指令。
哇,我不敢相信花了这么长时间才弄清楚。
如果您通过在浏览器中输入url来调用期望进行ajax调用的URL,您会得到什么? – 2010-04-14 20:07:10