Asp.net mvc MVC应用程序在服务器上不工作,但在开发机器上运行良好
我能够在我的开发机器上运行我的应用程序,但是一旦我将它发布到web服务器上,一些功能就会丢失。任何类型的.ajax POST通常都无法处理401未经授权的错误 服务器是带有IIS7的Windows 2008。我还在服务器上安装了带有MVC2的VisualStudio2008,并直接在服务器上运行了应用程序。ajax POST不起作用,但错误更改为500 unknownAsp.net mvc MVC应用程序在服务器上不工作,但在开发机器上运行良好,asp.net-mvc,jquery,asp.net-mvc-2,iis-7,Asp.net Mvc,Jquery,Asp.net Mvc 2,Iis 7,我能够在我的开发机器上运行我的应用程序,但是一旦我将它发布到web服务器上,一些功能就会丢失。任何类型的.ajax POST通常都无法处理401未经授权的错误 服务器是带有IIS7的Windows 2008。我还在服务器上安装了带有MVC2的VisualStudio2008,并直接在服务器上运行了应用程序。ajax POST不起作用,但错误更改为500 unknown 感谢您的帮助。如果您使用的是jquery,您确定您正在请求与应用程序位于同一域的数据吗?如果没有解决方法,我想您需要一个自定义的
感谢您的帮助。如果您使用的是jquery,您确定您正在请求与应用程序位于同一域的数据吗?如果没有解决方法,我想您需要一个自定义的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;
}
}
我曾经有过这个问题。调用ajax服务时,请确保使用相对URL
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文件中注释掉上面控制器的继承,并使用指令注释掉任何
哇,我真不敢相信花了这么长时间才弄明白。是的,他们都在同一个域上。谢谢你,如果你在操作中没有授权过滤器,我会把这个类放在哪里?你就不需要为他们设置特殊的ajax过滤器了。您是否使用授权过滤器装饰控制器或操作?如果您通过在浏览器中输入URL来调用预期ajax调用的URL,您会得到什么?