Why does Mongo IQueryable throw InvalidOperationException when applying $filter against ExtraElements via...












0















Trying to integrate Microsoft OData v4 stack with Mongo C# Driver. I would like to expose a Mongo collection and enable the OData $filter operation against the fields contained in the ExtraElements dictionary.



I have created a minimal example of the issue. Beginning with an empty WebAPI project in Visual Studio 2015, I created the following model:



  public class TestEntity
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string _id { get; set; }

public string Id { get; set; }

[BsonExtraElements]
public Dictionary<string, object> ExtraElements { get; set; }
}


I exposed EDM EntitySet via OData by adding the following at the end of WebApiConfig.Register() method:



  // OData
var edmBuilder = new ODataConventionModelBuilder();
edmBuilder.EntitySet<TestEntity>("test");

config.MapODataServiceRoute("odata", "odata", edmBuilder.GetEdmModel());


Finally, I created a simple TestController:



  public class TestController : ODataController
{
[EnableQuery(AllowedFunctions = Microsoft.AspNet.OData.Query.AllowedFunctions.All)]
public IQueryable<TestEntity> Get()
{
var mongo = new MongoClient();
var db = mongo.GetDatabase("test");
var collection = db.GetCollection<TestEntity>("test");
var result = collection.AsQueryable() as IQueryable<TestEntity>;
return result;
}
}


I added an actual object to the Mongo collection:



> db.test.insert( {Id:'test', Name:'testName'})                                                   WriteResult({ "nInserted" : 1 })
> db.test.find()



{ "_id" : ObjectId("5c266040fd7e5a3c63b33cd8"), "Id" : "test", "Name" : "testName" }




Now I can query find as long as I don't try to use $filter on the ExtraElements:



http://localhost:63927/odata/test



{"@odata.context":"http://localhost:63927/odata/$metadata#test","value":[{"Id":"test","Name":"testName","_id":"5c266040fd7e5a3c63b33cd8"}]}


However, if I try to filter against the Name (one of the ExtraElements) the following error occurs:



http://localhost:63927/odata/test?$filter=Name%20eq%20%27testName%27



Message: Convert(IIF((({document}{ExtraElements} != null) AndAlso {document}{ExtraElements}.ContainsKey("Name")), {document}{ExtraElements}.Item["Name"], null)) is not supported.

Exception: System.InvalidOperationException

Stack Trace:
at MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(Expression expression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute(Expression expression)
at MongoDB.Driver.Linq.MongoQueryableImpl`2.GetEnumerator()
at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteResourceSet(IEnumerable enumerable, IEdmTypeReference resourceSetType, ODataWriter writer, ODataSerializerContext writeContext)
at Microsoft.AspNet.OData.Formatter.ODataOutputFormatterHelper.WriteToStream(Type type, Object value, IEdmModel model, ODataVersion version, Uri baseAddress, MediaTypeHeaderValue contentType, IWebApiUrlHelper internaUrlHelper, IWebApiRequestMessage internalRequest, IWebApiHeaders internalRequestHeaders, Func`2 getODataMessageWrapper, Func`2 getEdmTypeSerializer, Func`2 getODataPayloadSerializer, Func`1 getODataSerializerContext)
at Microsoft.AspNet.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()


If I add a property such as public string Name { get; set; } to the TestEntity class then the filtering will work as expected, however, I am seeking a solution which allows filtering on the BsonExtraElements.










share|improve this question

























  • you can use filter() method on BsonExtraElement feature filtering like that stackoverflow.com/questions/39603151/…

    – dewelloper
    Dec 28 '18 at 21:57











  • @dewelloper Since the LINQ query is generated by the OData provider when the $filter is provided in the query string, I don't believe the referenced question or answers are applicable to my situation, can you elaborate on that further?

    – user700390
    Jan 2 at 17:25
















0















Trying to integrate Microsoft OData v4 stack with Mongo C# Driver. I would like to expose a Mongo collection and enable the OData $filter operation against the fields contained in the ExtraElements dictionary.



I have created a minimal example of the issue. Beginning with an empty WebAPI project in Visual Studio 2015, I created the following model:



  public class TestEntity
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string _id { get; set; }

public string Id { get; set; }

[BsonExtraElements]
public Dictionary<string, object> ExtraElements { get; set; }
}


I exposed EDM EntitySet via OData by adding the following at the end of WebApiConfig.Register() method:



  // OData
var edmBuilder = new ODataConventionModelBuilder();
edmBuilder.EntitySet<TestEntity>("test");

config.MapODataServiceRoute("odata", "odata", edmBuilder.GetEdmModel());


Finally, I created a simple TestController:



  public class TestController : ODataController
{
[EnableQuery(AllowedFunctions = Microsoft.AspNet.OData.Query.AllowedFunctions.All)]
public IQueryable<TestEntity> Get()
{
var mongo = new MongoClient();
var db = mongo.GetDatabase("test");
var collection = db.GetCollection<TestEntity>("test");
var result = collection.AsQueryable() as IQueryable<TestEntity>;
return result;
}
}


I added an actual object to the Mongo collection:



> db.test.insert( {Id:'test', Name:'testName'})                                                   WriteResult({ "nInserted" : 1 })
> db.test.find()



{ "_id" : ObjectId("5c266040fd7e5a3c63b33cd8"), "Id" : "test", "Name" : "testName" }




Now I can query find as long as I don't try to use $filter on the ExtraElements:



http://localhost:63927/odata/test



{"@odata.context":"http://localhost:63927/odata/$metadata#test","value":[{"Id":"test","Name":"testName","_id":"5c266040fd7e5a3c63b33cd8"}]}


However, if I try to filter against the Name (one of the ExtraElements) the following error occurs:



http://localhost:63927/odata/test?$filter=Name%20eq%20%27testName%27



Message: Convert(IIF((({document}{ExtraElements} != null) AndAlso {document}{ExtraElements}.ContainsKey("Name")), {document}{ExtraElements}.Item["Name"], null)) is not supported.

Exception: System.InvalidOperationException

Stack Trace:
at MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(Expression expression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute(Expression expression)
at MongoDB.Driver.Linq.MongoQueryableImpl`2.GetEnumerator()
at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteResourceSet(IEnumerable enumerable, IEdmTypeReference resourceSetType, ODataWriter writer, ODataSerializerContext writeContext)
at Microsoft.AspNet.OData.Formatter.ODataOutputFormatterHelper.WriteToStream(Type type, Object value, IEdmModel model, ODataVersion version, Uri baseAddress, MediaTypeHeaderValue contentType, IWebApiUrlHelper internaUrlHelper, IWebApiRequestMessage internalRequest, IWebApiHeaders internalRequestHeaders, Func`2 getODataMessageWrapper, Func`2 getEdmTypeSerializer, Func`2 getODataPayloadSerializer, Func`1 getODataSerializerContext)
at Microsoft.AspNet.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()


If I add a property such as public string Name { get; set; } to the TestEntity class then the filtering will work as expected, however, I am seeking a solution which allows filtering on the BsonExtraElements.










share|improve this question

























  • you can use filter() method on BsonExtraElement feature filtering like that stackoverflow.com/questions/39603151/…

    – dewelloper
    Dec 28 '18 at 21:57











  • @dewelloper Since the LINQ query is generated by the OData provider when the $filter is provided in the query string, I don't believe the referenced question or answers are applicable to my situation, can you elaborate on that further?

    – user700390
    Jan 2 at 17:25














0












0








0








Trying to integrate Microsoft OData v4 stack with Mongo C# Driver. I would like to expose a Mongo collection and enable the OData $filter operation against the fields contained in the ExtraElements dictionary.



I have created a minimal example of the issue. Beginning with an empty WebAPI project in Visual Studio 2015, I created the following model:



  public class TestEntity
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string _id { get; set; }

public string Id { get; set; }

[BsonExtraElements]
public Dictionary<string, object> ExtraElements { get; set; }
}


I exposed EDM EntitySet via OData by adding the following at the end of WebApiConfig.Register() method:



  // OData
var edmBuilder = new ODataConventionModelBuilder();
edmBuilder.EntitySet<TestEntity>("test");

config.MapODataServiceRoute("odata", "odata", edmBuilder.GetEdmModel());


Finally, I created a simple TestController:



  public class TestController : ODataController
{
[EnableQuery(AllowedFunctions = Microsoft.AspNet.OData.Query.AllowedFunctions.All)]
public IQueryable<TestEntity> Get()
{
var mongo = new MongoClient();
var db = mongo.GetDatabase("test");
var collection = db.GetCollection<TestEntity>("test");
var result = collection.AsQueryable() as IQueryable<TestEntity>;
return result;
}
}


I added an actual object to the Mongo collection:



> db.test.insert( {Id:'test', Name:'testName'})                                                   WriteResult({ "nInserted" : 1 })
> db.test.find()



{ "_id" : ObjectId("5c266040fd7e5a3c63b33cd8"), "Id" : "test", "Name" : "testName" }




Now I can query find as long as I don't try to use $filter on the ExtraElements:



http://localhost:63927/odata/test



{"@odata.context":"http://localhost:63927/odata/$metadata#test","value":[{"Id":"test","Name":"testName","_id":"5c266040fd7e5a3c63b33cd8"}]}


However, if I try to filter against the Name (one of the ExtraElements) the following error occurs:



http://localhost:63927/odata/test?$filter=Name%20eq%20%27testName%27



Message: Convert(IIF((({document}{ExtraElements} != null) AndAlso {document}{ExtraElements}.ContainsKey("Name")), {document}{ExtraElements}.Item["Name"], null)) is not supported.

Exception: System.InvalidOperationException

Stack Trace:
at MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(Expression expression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute(Expression expression)
at MongoDB.Driver.Linq.MongoQueryableImpl`2.GetEnumerator()
at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteResourceSet(IEnumerable enumerable, IEdmTypeReference resourceSetType, ODataWriter writer, ODataSerializerContext writeContext)
at Microsoft.AspNet.OData.Formatter.ODataOutputFormatterHelper.WriteToStream(Type type, Object value, IEdmModel model, ODataVersion version, Uri baseAddress, MediaTypeHeaderValue contentType, IWebApiUrlHelper internaUrlHelper, IWebApiRequestMessage internalRequest, IWebApiHeaders internalRequestHeaders, Func`2 getODataMessageWrapper, Func`2 getEdmTypeSerializer, Func`2 getODataPayloadSerializer, Func`1 getODataSerializerContext)
at Microsoft.AspNet.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()


If I add a property such as public string Name { get; set; } to the TestEntity class then the filtering will work as expected, however, I am seeking a solution which allows filtering on the BsonExtraElements.










share|improve this question
















Trying to integrate Microsoft OData v4 stack with Mongo C# Driver. I would like to expose a Mongo collection and enable the OData $filter operation against the fields contained in the ExtraElements dictionary.



I have created a minimal example of the issue. Beginning with an empty WebAPI project in Visual Studio 2015, I created the following model:



  public class TestEntity
{
[BsonId, BsonRepresentation(BsonType.ObjectId)]
public string _id { get; set; }

public string Id { get; set; }

[BsonExtraElements]
public Dictionary<string, object> ExtraElements { get; set; }
}


I exposed EDM EntitySet via OData by adding the following at the end of WebApiConfig.Register() method:



  // OData
var edmBuilder = new ODataConventionModelBuilder();
edmBuilder.EntitySet<TestEntity>("test");

config.MapODataServiceRoute("odata", "odata", edmBuilder.GetEdmModel());


Finally, I created a simple TestController:



  public class TestController : ODataController
{
[EnableQuery(AllowedFunctions = Microsoft.AspNet.OData.Query.AllowedFunctions.All)]
public IQueryable<TestEntity> Get()
{
var mongo = new MongoClient();
var db = mongo.GetDatabase("test");
var collection = db.GetCollection<TestEntity>("test");
var result = collection.AsQueryable() as IQueryable<TestEntity>;
return result;
}
}


I added an actual object to the Mongo collection:



> db.test.insert( {Id:'test', Name:'testName'})                                                   WriteResult({ "nInserted" : 1 })
> db.test.find()



{ "_id" : ObjectId("5c266040fd7e5a3c63b33cd8"), "Id" : "test", "Name" : "testName" }




Now I can query find as long as I don't try to use $filter on the ExtraElements:



http://localhost:63927/odata/test



{"@odata.context":"http://localhost:63927/odata/$metadata#test","value":[{"Id":"test","Name":"testName","_id":"5c266040fd7e5a3c63b33cd8"}]}


However, if I try to filter against the Name (one of the ExtraElements) the following error occurs:



http://localhost:63927/odata/test?$filter=Name%20eq%20%27testName%27



Message: Convert(IIF((({document}{ExtraElements} != null) AndAlso {document}{ExtraElements}.ContainsKey("Name")), {document}{ExtraElements}.Item["Name"], null)) is not supported.

Exception: System.InvalidOperationException

Stack Trace:
at MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(Expression expression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node)
at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression node)
at MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
at MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute(Expression expression)
at MongoDB.Driver.Linq.MongoQueryableImpl`2.GetEnumerator()
at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteResourceSet(IEnumerable enumerable, IEdmTypeReference resourceSetType, ODataWriter writer, ODataSerializerContext writeContext)
at Microsoft.AspNet.OData.Formatter.ODataOutputFormatterHelper.WriteToStream(Type type, Object value, IEdmModel model, ODataVersion version, Uri baseAddress, MediaTypeHeaderValue contentType, IWebApiUrlHelper internaUrlHelper, IWebApiRequestMessage internalRequest, IWebApiHeaders internalRequestHeaders, Func`2 getODataMessageWrapper, Func`2 getEdmTypeSerializer, Func`2 getODataPayloadSerializer, Func`1 getODataSerializerContext)
at Microsoft.AspNet.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()


If I add a property such as public string Name { get; set; } to the TestEntity class then the filtering will work as expected, however, I am seeking a solution which allows filtering on the BsonExtraElements.







c# asp.net mongodb odata mongodb-.net-driver






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 28 '18 at 21:52







user700390

















asked Dec 28 '18 at 17:57









user700390user700390

1,74611222




1,74611222













  • you can use filter() method on BsonExtraElement feature filtering like that stackoverflow.com/questions/39603151/…

    – dewelloper
    Dec 28 '18 at 21:57











  • @dewelloper Since the LINQ query is generated by the OData provider when the $filter is provided in the query string, I don't believe the referenced question or answers are applicable to my situation, can you elaborate on that further?

    – user700390
    Jan 2 at 17:25



















  • you can use filter() method on BsonExtraElement feature filtering like that stackoverflow.com/questions/39603151/…

    – dewelloper
    Dec 28 '18 at 21:57











  • @dewelloper Since the LINQ query is generated by the OData provider when the $filter is provided in the query string, I don't believe the referenced question or answers are applicable to my situation, can you elaborate on that further?

    – user700390
    Jan 2 at 17:25

















you can use filter() method on BsonExtraElement feature filtering like that stackoverflow.com/questions/39603151/…

– dewelloper
Dec 28 '18 at 21:57





you can use filter() method on BsonExtraElement feature filtering like that stackoverflow.com/questions/39603151/…

– dewelloper
Dec 28 '18 at 21:57













@dewelloper Since the LINQ query is generated by the OData provider when the $filter is provided in the query string, I don't believe the referenced question or answers are applicable to my situation, can you elaborate on that further?

– user700390
Jan 2 at 17:25





@dewelloper Since the LINQ query is generated by the OData provider when the $filter is provided in the query string, I don't believe the referenced question or answers are applicable to my situation, can you elaborate on that further?

– user700390
Jan 2 at 17:25












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53962481%2fwhy-does-mongo-iqueryable-throw-invalidoperationexception-when-applying-filter%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53962481%2fwhy-does-mongo-iqueryable-throw-invalidoperationexception-when-applying-filter%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Monofisismo

Angular Downloading a file using contenturl with Basic Authentication

Olmecas