2010-04-14 83 views
1

我能夠在我的開發機器上運行我的應用程序,但只要我將它發佈到Web服務器,一些功能就會丟失。任何類型的.ajax POST通常不會有401未經授權的錯誤。MVC應用程序不能在服務器上運行,但在開發機器上運行良好

服務器是Windows 2008與IIS7。我還在服務器上安裝了MVC2的Visual Studio 2008,並直接在服務器上運行應用程序,並且相同的.ajax POST不起作用,但錯誤更改爲500未知。

感謝您的幫助。

+1

如果您通過在瀏覽器中輸入url來調用期望進行ajax調用的URL,您會得到什麼? – 2010-04-14 20:07:10

回答

0

如果你正在使用jQuery,你確定你正在請求與你的應用程序位於同一個域的數據嗎?如果不存在這個jQuery Forum post:

+0

是的,他們都在同一個域名。 – 2010-04-14 17:45:06

2

的解決方法,我認爲你需要一個自定義的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;    
     } 
    } 
+0

謝謝你我在哪裏放置這個類 – 2010-04-14 17:58:19

+0

如果你沒有授權過濾器,你不需要爲它們設置一個特殊的Ajax過濾器。您是否使用授權過濾器來裝飾控制器或動作? – 2010-04-14 20:09:23

0

我曾經有過這個問題。當您致電您的ajax服務時,請務必使用相關網址。

www.mysite.com/myservice 

一樣

mysite.com/myservice 

www.mysite.com 

所以打電話時,調用該服務時,你應該用的是:

/myservice 
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指令。

哇,我不敢相信花了這麼長時間才弄清楚。

相關問題