Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC应用程序在服务器上不工作,但在开发机器上运行良好_Asp.net Mvc_Jquery_Asp.net Mvc 2_Iis 7 - Fatal编程技术网

Asp.net mvc MVC应用程序在服务器上不工作,但在开发机器上运行良好

Asp.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,您确定您正在请求与应用程序位于同一域的数据吗?如果没有解决方法,我想您需要一个自定义的

我能够在我的开发机器上运行我的应用程序,但是一旦我将它发布到web服务器上,一些功能就会丢失。任何类型的.ajax POST通常都无法处理401未经授权的错误

服务器是带有IIS7的Windows 2008。我还在服务器上安装了带有MVC2的VisualStudio2008,并直接在服务器上运行了应用程序。ajax POST不起作用,但错误更改为500 unknown


感谢您的帮助。

如果您使用的是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,您会得到什么?