2014-05-13 4 views
-2

Avant:Erreur inconnue dans le projet ASP.NET MVC.

Je le code suivant dans mon action du contrôleur MVC. Cela fonctionne bien dans la machine de développement exécutant VS2012 mais ne parvient pas à enregistrer dans l'environnement de production dans IIS. Quel pourrait être le problème? Je suis passé par le code mais pas d'erreur du tout. En production, il ne montre aucune erreur dans e.Message ou dbEx.Message non plus. Merci pour l'aide.

Après

J'ai une action MVC qui est censé enregistrer un fichier en même temps que le reste de l'information.

Le code fonctionne correctement sur ma machine de développement, mais lorsque je l'exécute sur le serveur de production, le fichier n'est pas enregistré. Je n'ai aucune erreur dans mon contrôleur.

Voici ce que j'ai essayé:

  1. Essayé pour enregistrer les exceptions
  2. je peux voir le fichier en cours Signalé dans des outils de développement Chrome
  3. J'ai des autorisations de fichier vérifié dans le dossier cible

Le code:

[HttpPost] 
    public ActionResult CreateRecipe(MenuDto model, HttpPostedFileBase file) 
    { 

     if (Session["username"] == null || Session["jobtitle"] == null) 
     { 
      TempData["msg"] = "Sorry your session has timed out or you have not logged in. Please log-in."; 
      return RedirectToAction("LogIn", "Home"); 
     } 
     try 
     { 

      var cl = new CategoryBL(); 
     ViewBag.ListCategories = new SelectList(new List<Category>(){ new Category() { CatName = "--Select Category--"}}.Concat(cl.RetrieveAll()), 
      "CatName", "CatName"); 

      RecipeBL bl = new RecipeBL(); 
      model.Recipes = bl.RetrieveAll(); 
      if (file == null) 
      { 
       ViewBag.Msg = "Please select a picture for this recipe"; 
       return View(model); 
      } 

      string path = ""; 

      if (ModelState.IsValid) 
      { 
       if (file != null) 
       { 
        string pic = System.IO.Path.GetFileName(file.FileName); 
        path = System.IO.Path.Combine(Server.MapPath("~/pictures/Recipes"), pic); 

        // file is uploaded 
        file.SaveAs(path); 

        model.Image = @"\pictures\Recipes\" + file.FileName; 
       } 


       var item = new Recipe() 
       { 
        RecipeCode = model.RecipeCode, 
        RecipeMethod = model.RecipeMethod, 
        RecipeName = model.RecipeName, 
        SellingPrice = model.SellingPrice, 
        Image = model.Image, 
        SubCategory = model.SubCategory 
       }; 
       bl.Create(item, Session["username"].ToString()); 

      } 
      ViewBag.Msg = "Recipe was successfully registered."; 
      model.Recipes = bl.RetrieveAll(); 
      return View(model); 
     } 
     catch (DbEntityValidationException dbEx) 
     { 
      foreach (var validationErrors in dbEx.EntityValidationErrors) 
      { 
       foreach (var validationError in validationErrors.ValidationErrors) 
       { 
        Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); 
       } 
      } 

      ViewBag.Msg = "Recipe registration failed." + dbEx.Message; 
      return View(model); 
     } 
     catch (Exception e) 
     { 
      ViewBag.Msg = "Recipe registration failed." + e.Message; 
      return View(model); 
     } 
    } 
+0

-1 car vous n'expliquez pas le problème et attend juste que nous le réparions. Qu'avez-vous essayé de le résoudre? Comment le reproduisez-vous? – jgauffin

+0

Tout ce que je mets dedans est exactement ce qu'il s'est passé. Comment suis-je censé expliquer un problème que je ne connais pas? C'est parce que j'ai essayé de le résoudre et que je ne pouvais pas le mettre sur StackOverflow. Je ne suis pas nouveau ici, donc je connais les règles. Le problème est simple: l'extrait de code ci-dessus fonctionne bien et valide les données dans MenuD pour modéliser dans la base de données lorsque je cours dans VS 2012. Aucune erreur du tout, même avec un point de rupture. Pourtant quand je le déploie sur IIS il ne commet pas à la base de données et ce n'est pas parce qu'il n'était pas connecté à db parce que je m'étais connecté avec succès et la chaîne de connexion dans le web config est – Charles

+1

la description. Qu'est-ce qui n'est pas enregistré? Est-ce que ça marche dans certains cas? Le fichier est-il inclus dans le message ou est-il manquant dans l'environnement de production? Avez-vous vérifié les permissions de fichiers? Le dossier existe-t-il? C'est pourquoi vous obtenez un -1. Montrez de l'effort. – jgauffin

Répondre

0

Enfin, l'erreur est apparue. Il s'agissait d'une erreur d'accès refusé - Le téléchargement du fichier vers C: \ users \ inetpub .... \ Picturefolder \ a échoué. Accès refusé. J'ai réalisé que l'erreur était cachée mais je ne sais pas pourquoi. Il s'est finalement montré aujourd'hui.

Une solution assez simple consistait à modifier les paramètres d'autorisation de sécurité/dossier dans le dossier de l'utilisateur connecté. J'ai fait un clic droit sur le dossier parent inetpub et sélectionné les propriétés dans le menu contextuel puis l'onglet de sécurité sélectionné. Lorsque j'ai cliqué sur l'utilisateur connecté, j'ai remarqué que toutes les cases de la fenêtre d'autorisation ne sont pas cochées sous Autoriser. J'ai donc sélectionné ALL (écriture, etc), puis Applied. J'étais maintenant bon à faire. J'ai tenté l'opération pour enregistrer le fichier image téléchargé et cela a fonctionné comme il se doit. :)

+1

C'est suffisant avec l'autorisation de modification. – jgauffin

Questions connexes