You are building an RESTful MVC Web API OData, enabled using an ODataController.
You mark with the "EnableQuery" attribute the Action Methods, compile the application, check that the web service is working, by typing "$metadata" to the URI. Everything seems fine.
"No type was found that matches the controller named..."
Why is that? If the OData REST service is working: why cannot find the data?
When you create the Web API OData Controller, and make it inherit from ODataController, you MUST make sure that the name of the Controller corresponds to the Entity Set that you pass to the ODataConventionModelBuilder while you configured the application in the WebApiConfig file:
ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<Note>("Notes"); config.MapODataServiceRoute( routeName: "ODataRoute", routePrefix: "OData", model: builder.GetEdmModel());
If the name of the Entity is "Notes", the name of the Controller MUST be "Notes" :
Important: the NAME of the Controller MUST be identical to the name of the exposed EDM Entity : in our example , we must name it "NotesController".
That's why the WebAPI could not find a type corresponding to the URI OData query at the request .
Another CONVENTION that you must take into account, is the following:
Important: An ODataController's Action method's name MUST comply with one of the HTTP verbs : "Get" is the name of the method for HTTP GET, "Post" is for HTTP POST, "Put" corresponds to the HTTP PUT verb, "Patch" is for HTTP PATCH, "Delete" is for HTTP DELETE.
That's all!!! Enjoy OData Web API !!!!
By Carmel Shvartzman
עריכה: כרמל שוורצמן