Web API routes failing v8.1.4

Adam Steffes asked on September 30, 2014 17:16

I have a Kentico project that was recently upgraded to version 8.1.4 from some version < 8.1.

A previously working Web API route and controller is no longer functioning, and I'm struggling to understand what else I can try to get it to work.

Our route is defined as follows:

config.Routes.MapHttpRoute("Api", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }

This is how our route is and was defined. This code is called from the MCS_MVCModule class during initialization as follows:

WebApiConfig.Register(GlobalConfiguration.Configuration);

Our controller is defined as: public class CommentsController : ApiController

Our action is: public CommentResponse GetComments(int boardID)

Couple of troubleshooting steps we've noticed and addressed: -Added the /api/ path to Kentico's "ignore urls" list -Verified that the route configuration is being hit -We did notice that the upgrade eliminated our WebApiConfig.Register() method's contents. We added back in the route above. - We noticed that the upgrade process ignored our custom-named solution file, and instead created a new solution file without the web API components. We've verified that they're back in place

Really looking for any good alternatives here. Please let me know if you have any suggestions.

Recent Answers


Jakub Kadlubiec answered on October 2, 2014 15:58 (last edited on October 2, 2014 15:58)

Hi Adam,

we use WebWpi in Kentico 8.1 as well and we noticed poor performance at application start caused by WebApi and we had to customize it a little in order to make it perform better. To be more specific, when application starts, WebApi browses through all assemblies and tries to find classes deriving from ApiController. As our code base is fairly large, this lookup took too long and we needed to replace the default WebApi IHttpControllerTypeResolver with our implementation which looks only for explicitly registered controllers.

You have two options how to make your API work:

Option 1: Register all of your controllers with the RegisterApiController assembly attribute.

[assembly: RegisterApiController(typeof(LiveTileController))]

namespace CMS.ApplicationDashboard.ApiControllers
{
    internal sealed class LiveTileController : ApiController
    {

...

You will need to reference CMS.WebApi assembly to do that.

Option 2: Use newer version of WebApi than we use - that would be version 2 (assembly 5.2.2)

I apologize for the inconvenience this issue caused you. We are thinking how to improve this in Kentico 8.2. One of the solutions we are looking at, is to require registration only for our libraries and always go through all classes in customer's libraries including CMSApp_MVC.

2 votesVote for this answer Mark as a Correct answer

Sachin Sharma answered on February 20, 2017 18:39

Hi,

I tried using your example but it deosn't see to be working for me. I followed the steps as you mentioned here but it still doesn't recognize the RegisterApiController class.

I am using Kentico10 and have created a webapi project for data access under website solution.

Can you please provide more details on it.

0 votesVote for this answer Mark as a Correct answer

Alex Golebiewski answered on January 29, 2018 16:57

Has anyone found an answer to this? I'm currently on K10.0.50 and am having the same issue. I can't even get the example web api working in my project.

0 votesVote for this answer Mark as a Correct answer

NYCB Web Producer answered on August 24, 2018 22:06 (last edited on August 24, 2018 22:06)

Alex - I just ran into the same issue. I cut and paste the exact sample code they have at https://docs.kentico.com/k11/developing-websites/using-asp-net-web-api-with-kentico and yet the route would produce a 404. It then hit me that when I installed web api from nuget in my class library project it defaulted to the latest version. When I downgraded to the version that matched what is in the CMS project the routes started working. Hope that helps.

0 votesVote for this answer Mark as a Correct answer

   Please, sign in to be able to submit a new answer.