2010-04-14 3 views
1

Je suis en mesure d'exécuter mon application très bien sur ma machine dev mais dès que je le publie sur le serveur web certaines fonctionnalités sont perdues. Tout type de POST .ajax ne fonctionne généralement pas avec une erreur 401 non autorisée.MVC application ne fonctionne pas sur le serveur, mais est bien sur la machine de développement

Le serveur est Windows 2008 avec IIS7. J'ai également installé Visual Studio 2008 avec MVC2 sur le serveur et a exécuté l'application directement sur le serveur et le même POST .ajax ne fonctionne pas mais l'erreur est passée à 500 inconnue.

Merci pour l'aide.

+1

Si vous appelez une URL qui attend un appel ajax en entrant l'URL dans le navigateur, qu'obtenez-vous? –

Répondre

0

Si vous utilisez jquery, êtes-vous sûr de vouloir obtenir des données sur le même domaine que votre application? Si vous n'êtes pas il y a des solutions de contournement sur ce jQuery Forum post:

+0

Oui, ils sont tous les deux sur le même domaine. –

2

Je pense que vous avez besoin d'une autorisation ASP.NET MVC attribut personnalisé Ajax Demandes

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

Merci où placer cette classe –

+0

Si vous n'avez pas de filtre d'autorisation pour les actions, vous n'aurez pas besoin d'un filtre ajax spécial pour eux. Avez-vous décoré le contrôleur ou l'action avec un filtre d'autorisation? –

0

J'ai eu ce problème une fois. Lorsque vous appelez vos services ajax, veillez à utiliser les URL relatives.

www.mysite.com/myservice 

est pas le même que

mysite.com/myservice 

lors de l'appel de

www.mysite.com 

Alors, que vous devez utiliser lorsque vous appelez le service est:

/myservice 
0

Réponse: On dirait que j'ai trouvé mon problème.

Dans mon contrôleur, j'ai la méthode suivante:

[JsonFilter(Param = "course", JsonDataType = typeof(EmployeeSearchItem))] 
    public ActionResult ViewCourseByID(EmployeeSearchItem course) 
    { 

...}

Et EmployeeSearchItem est une classe dans son propre fichier .cs:

namespace EducationAssistanceMVC.Models 
{ 
public class EmployeeSearchItem //: Controller 
{ 
    public string empIDSearch { get; set; } 

... }

Ma solution était de commenter l'héritage du contrôleur ci-dessus dans le fichier EmployeeSearchItem.cs et commentez également les directives Using. Wow, je ne peux pas croire que cela ait pris autant de temps pour comprendre cela.

Questions connexes