MissingManifestResourceException when using OData query string

I have an ASP.NET Core Web API application that uses the Microsoft.AspNetCore.OData.vNext package. When using a query string to try to use OData functionality, I get a MissingManifestResourceException. Here is the code in question:

[EnableQuery]
[HttpGet()]
public class LocationsController : Controller
{
  public IActionResult GetLocations()
  {
    IQueryable<Location> locationEntities = _locationInfoRepo.GetLocations();
    if (locationEntities == null)
    {
        return NotFound();
    }

    var results = Mapper.Map<IEnumerable<LocationDTO>>(locationEntities);

    return Ok(results);
  }
}

Note. I already tried to change the type of the method from IActionResult to IQueryable <> to no avail. I also commented on the Automapper Map method so that there are no problems.

Here is a method that uses EF to return data:

public IQueryable<Location> GetLocations()
{
    return _context.Locations;
}

Here's the url along with the query string: http: // localhost / api / locations ? $ filter = Name% 20eq% 20'Bob '

"" - , , .

:

System.Resources.MissingManifestResourceException: Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure "Microsoft.AspNetCore.OData.SRResources.resources" was correctly embedded or linked into assembly "Microsoft.AspNetCore.OData.vNext" at compile time, or that all the satellite assemblies required are loadable and fully signed.
    at System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)
    at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
    at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
    at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
    at System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
    at Microsoft.AspNetCore.OData.SRResources.GetString(String name, String[] formatterNames)
    at Microsoft.AspNetCore.OData.SRResources.get_ClrTypeNotInModel()
    at Microsoft.AspNetCore.OData.ODataQueryContext..ctor(IEdmModel model, Type elementClrType, ODataPath path)
    at Microsoft.AspNetCore.OData.EnableQueryAttribute.OnActionExecuted(ActionExecutedContext context)
    at Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.<OnActionExecutionAsync>d__6.MoveNext()
    --- 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 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextActionFilterAsync>d__25.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextExceptionFilterAsync>d__24.MoveNext()

- ?

+4
1

, , , [RouteAttribute] . .

Startup.cs :

public void ConfigureServices(IServiceCollection services)
{
    // Your stuff...
    services.AddOData(opt => opt.RoutingConventions
                                    .Insert(0, new DefaultODataRoutingConvention()));
    // Your stuff...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // Your stuff...
    var provider = app.ApplicationServices.GetRequiredService<IAssemblyProvider>();
    var model = GetEdmModel(provider);
    app.UseMvc(builder => builder
        .MapODataRoute("odata", model)
        .MapRoute("default", "api/{controller}/{id?}"));
}

private static IEdmModel GetEdmModel(IAssemblyProvider assemblyProvider)
{
    var builder = new ODataConventionModelBuilder(assemblyProvider);
    builder.EntitySet<Product>("Products");

    return builder.GetEdmModel();
}

:

[EnableQuery]
public class ProductsController : Controller
{        
    private readonly IProductDbContext _dbContext;

    public ProductsController(IProductDbContext dbContext)
    {
         _dbContext = dbContext;
    }        

    [HttpGet]
    public IQueryable<Product> Get()
    {
        return _dbContext.Products.AsQueryable();
    }
}

MapODataRoute OData ProductController - , .

, RouteAttribute " http://localhost:44302/odata/Products? $top = 2 & $skip = 2" .

, , . , .

0

Source: https://habr.com/ru/post/1673535/


All Articles