MVC应用程序不在服务器上工作但在开发机器上很好

时间:2010-04-14 17:26:20

标签: asp.net-mvc jquery asp.net-mvc-2 iis-7

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

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

感谢您的帮助。

4 个答案:

答案 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指令。

哇,我无法相信花了这么长时间来解决这个问题。