skip to Main Content

I have an app that uses CosmosDb as the database and using AspNetIdentityDocument. When I call var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, false), i get the error Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey

void InitializeDocumentClient(DocumentClient client) code attempts to create the container if not there. It works for the creating the container on my CossmosDb emultated store but fails on the Azure store requiring a partition key! My app works on the emulated store!

Program.cs

builder.Services.AddDefaultDocumentClientForIdentity(
            builder.Configuration.GetValue<Uri>("DocumentDbClient:EndpointUri"),
            builder.Configuration.GetValue<string>("DocumentDbClient:AuthorizationKey"),
            afterCreation: InitializeDocumentClient);

builder.Services.AddIdentity<ApplicationUser, DocumentDbIdentityRole>()
.AddDocumentDbStores(options =>
{
    options.UserStoreDocumentCollection = "AspNetIdentity";
    options.Database = "RNPbooking";
})
.AddDefaultTokenProviders();




void InitializeDocumentClient(DocumentClient client)

{
try
{
var db = client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri("RNPbooking")).Result;
}
catch (AggregateException ae)
{
ae.Handle(ex =>
{
if (ex.GetType() == typeof(DocumentClientException) && ((DocumentClientException)ex).StatusCode == HttpStatusCode.NotFound)
{
var db = client.CreateDatabaseAsync(new Microsoft.Azure.Documents.Database() { Id = "RNPbooking" }).Result;
return true;
}

        return false;
    });
}

try
{
    var collection = client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("RNPbooking", "AspNetIdentity")).Result;
}
catch (AggregateException ae)
{
    ae.Handle(ex =>
    {
        if (ex.GetType() == typeof(DocumentClientException) && ((DocumentClientException)ex).StatusCode == HttpStatusCode.NotFound)
        {
            DocumentCollection collection = new DocumentCollection()
            {
                Id = "AspNetIdentity"
            };
            
            collection = client.CreateDocumentCollectionAsync(UriFactory.CreateDatabaseUri("RNPbooking"),collection).Result;

            return true;
        }

        return false;
    });

}
}

Controller

[Authorize(Roles = "Admin)]
public class AdminController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly SignInManager<ApplicationUser> _signInManager;
    
    public CosmosClient _client;

    public AdminController(
        UserManager<ApplicationUser> userManager,
        SignInManager<ApplicationUser> signInManager,

        )
    
    {
        _userManager = userManager;
        _signInManager = signInManager;
        
    }

2

Answers


  1. You need to fill in CreateDocumentCollectionUri method with FeedOptions object as a parameter

     UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),new FeedOptions { EnableCrossPartitionQuery=true})
    
    Login or Signup to reply.
  2. UPDATED: From the code examples, you seem to be using this library https://github.com/codekoenig/AspNetCore.Identity.DocumentDb, AspNetCore.Identity.DocumentDb.

    This error means the library you are using is performing a Document Query in their code at some point, it is not related to the creation of the Database or Collection.

    The library code must be using CreateDocumentQuery somewhere, that code is missing:

     new FeedOptions { EnableCrossPartitionQuery = true };
    

    If you search their code base, you will see multiple scenarios like that: https://github.com/codekoenig/AspNetCore.Identity.DocumentDb/search?q=CreateDocumentQuery

    Because this code is out of your control, you should try and contact the owner to see if this is a fix they can do on their end. The code for the library doesn’t seem to have been updated in several years, so maybe this library is not maintained?

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search