2013-06-06 3 views
1

Je suis nouveau à servicestack et je l'apprécie vraiment, mais je ne peux pas pour la vie de moi comprendre pourquoi cela se produit.ServiceStack NullReferenceException

I have mapped it as ROUTES.Add<images>("/Images"); in the APPHOST.cs 

J'utilise le repos Console (plugin chrome) pour tester et POST JSON suivant: (je sais que ce n'est pas et l'encodage base64 réelle).

Toutes les pensées seraient appréciées.

// Testing JSON 
     {"base64Encoding":"asdasdasdasd"} 
    // 

    using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using ServiceStack.ServiceInterface; 
using RewoServiceLayer.RequestDTOs; 
using System.Data.Entity; 
using ServiceStack.ServiceInterface.ServiceModel; 
using ServiceStack.Configuration; 
using ServiceStack.Common; 
using ServiceStack.ServiceHost; 
using ServiceStack.ServiceInterface.Auth; 
using ServiceStack.WebHost.Endpoints; 
using System.IO; 
using System.Web.Hosting; 

namespace Blah.Services 
{ 

    public class ImageResponse 
    { 
     public images image { get; set; } 
     public ResponseStatus ResponseStatus { get; set; } //Where Exceptions get auto-serialized 
    } 

    public class ImageRequest 
    { 
     public String base64Encoding; 
    } 

    public class ImageService : Service 
    { 
     //Give me something that looks like this: 
     //"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABG4...YII="; 
     public ImageResponse Post(ImageRequest request) 
     { 
      String base64EncodingImg = request.base64Encoding; 
      using (var db = new BlahDB()) 
      { 
       //save to db 
       images imgToSave = new images(); 
       //get base64 
       string base64 = base64EncodingImg.Substring(base64EncodingImg.IndexOf(',') + 1); 
       base64 = base64.Trim('\0'); 
       byte[] imgBinData = Convert.FromBase64String(base64); 
       //get the 
       imgToSave.image_type = base64EncodingImg.Substring(0,base64EncodingImg.IndexOf(',')); 
       db.images.Add(imgToSave); 
       db.SaveChanges(); 
       //then save string contents to disk using ID 
       imgToSave.image_disk_loc = getPathFromImage(imgToSave); 
       writeByteArrToDisk(imgBinData, imgToSave.image_disk_loc); 
       db.SaveChanges(); 

       ImageResponse imgResponse = new ImageResponse(); 
       imgResponse.image = imgToSave; 
       return imgResponse; 
      } 
     } 
     private Boolean writeByteArrToDisk(byte[] toWrite, String path) 
     { 
      try 
      { 
       File.WriteAllBytes(path, toWrite); 
       return true; 
      } 
      catch (Exception e) 
      { 

       return false; 
      } 
     } 

     private String getAbsolutePathToImagesFolder() 
     { 
      return HostingEnvironment.MapPath(@"~/App_Data/UploadedImages"); 
     } 

     private String getPathFromImage(images imgModel) 
     { 
      if (imgModel.image_disk_loc.IsNullOrEmpty()) 
      { 
       return getAbsolutePathToImagesFolder() + imgModel.image_id; 
      } 
      else 
      { 
       return imgModel.image_disk_loc; 
      } 
     } 
    } 



} 

Je reçois l'erreur suivante et il ne frappe pas la méthode Post quand je debug:

{ 
    "responseStatus": { 
     "errorCode": "NullReferenceException", 
     "message": "Object reference not set to an instance of an object.", 
     "stackTrace": " at ServiceStack.WebHost.Endpoints.Utils.FilterAttributeCache.GetRequestFilterAttributes(Type requestDtoType)\r\n at ServiceStack.WebHost.Endpoints.EndpointHost.ApplyRequestFilters(IHttpRequest httpReq, IHttpResponse httpRes, Object requestDto)\r\n at ServiceStack.WebHost.Endpoints.RestHandler.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, String operationName)" 
    } 
} 

Répondre

3

Je ne vois pas votre classe images mais je pense que vous devez changer

ROUTES.Add<images>("/Images"); 

Pour

ROUTES.Add<ImageRequest>("/Images") 

puisque la publication sur votre ImageService est à la recherche d'une demande de type ImageRequest.

+0

Vous avez raison, je dois avoir manqué cela lorsque je me refaisais un gros merci !! – Aziz