Search code examples
c#servicestacksitefinitysitefinity-3x

ServiceStack and Sitefinity V3.7 webservices Sync or Async?


I tried to implement a simple webservice using ServiceStack and Sitefinity V3.7sp3 net35. I added ServiceStack as localhost/api using this web config. After implemented the service class using IService to get the full items News contents and registred the Global asax for routes. The result is always zero items. It's very similar to this other post in Sf Forum. Change the ContentManager or the provider is always returning zero items and zero as count. My Sf is allowing multilanguage en,fr..using path. Many be need to be Async?. Can someone help me to fix this case using servicestack of course.

Regards.

[Description("Find items by baseclass, or all default if no genre is provided")]
[RestService("/api/items")]
[RestService("/api/items/news")]
[RestService("/api/items/news/{provider}")]
[RestService("/api/items/news/{provider}/{language}")]
[AspNetCompatibilityRequirements(RequirementsMode =      AspNetCompatibilityRequirementsMode.Allowed)] 
public class Items
{
  public string provider { get; set; }
  public string language { get;set; }
  IList ItemsList{ get; set;  }  
}

/// <summary>
/// Summary description for NewsResponse
/// </summary>
public class ItemsResponse
{
   public ItemsResponse()
   {
   }
   public ResponseStatus ResponseStatus { get; set; } //Automatic exception handling
   public IList Items { get; set; }//return a list of objects
}

/// <summary>
/// Summary description for NewsServices
/// </summary>
public class ItemsService : ServiceStack.ServiceHost.IAsyncService<Items>
{
   //public object Execute(Items request)// with IService
   //{
   //    ItemsResponse response = new ItemsResponse();
   //    response.Items = ItemsList(request.provider,  request.language);//request.provider
   //    return response;
   //  ALWAYS ZERO AS RESPONSE
   //}

   //ERROR ON HANDLER ?    
   object IAsyncService<Items>.ExecuteAsync(Items request)
   {
      ItemsResponse response = new ItemsResponse();
      //if (request.provider != null)
      response.Items = ItemsList(request.baseclass, request.provider, request.language);//request.provider
      return response;    
    }

    public IList ItemsList(string provider, string language)
    {          
        if(provider==string.Empty)
            provider = NewsManager.DefaultContentProvider;
        if (language == string.Empty)
            language = "es";
        System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
        NewsManager manager = new NewsManager(provider);
        //Get items from this language
        IList data = manager.Content.GetContent();
        return data;                    
    }
}

Solution

  • Remove the /api from your RestService()'s. So like:

    [RestService("/items")]
    [RestService("/items/news")]
    [RestService("/items/news/{provider}")]
    [RestService("/items/news/{provider}/{language}")]
    

    Or your url would have to be domain.com/api/api/items...

    You have tested your site with domain.com/api/metadata?