Chris
Chris

Reputation: 815

MVC Can't Find Web API Controller

I have a MVC 4 app in which i am wanting to use the web api to get my data. EDIT- this is a Single Page Application that started out with the Hot Towel Template. The problem is that I get the 404 resource not found when i try to call the controller from JSON. Here is my Controller-

 Public Class CAApprovalController
     Inherits ApiController

     Public Function GetValues() As IEnumerable(Of String)
         Return New String() {"value1", "value2"}
    End Function
 End Class

Here is my JSON call-

 function getallCertificates() {
     $.getJSON('api/CAApproval', function (data) {
         allCertificates([]);
         var temp = allCertificates();
         data.forEach(function (p) {
             var certificate = new Certificate(p.ClientID, p.RequestDate, p.UserName,                  p.StatusDescription,             p.StatusCode, p.StatusDesc, p.CEOUserName);
             temp.push(certificate);
         });
         allCertificates.valueHasMutated();
         return allCertificates();
     });
 }

Here is the webapiconfig-

Public Class WebApiConfig
        Public Shared Sub Register(ByVal config As HttpConfiguration)
            config.Routes.MapHttpRoute( _
                name:="DefaultApi", _
                routeTemplate:="api/{controller}/{id}", _
                defaults:=New With {.id = RouteParameter.Optional} _
        )


    'To disable tracing in your application, please comment out or remove the following line of code
    'For more information, refer to: http://www.asp.net/web-api
    config.EnableSystemDiagnosticsTracing()

    'Use camel case for JSON data.
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = New CamelCasePropertyNamesContractResolver()
End Sub
End Class

I am new to MVC and especially web api, and am thinking it is a newbie issue. Just not sure what the problem is. Is there a configuration or something i am missing? The project was created as a MVC 4 / web api application.

Upvotes: 0

Views: 3794

Answers (3)

Chris
Chris

Reputation: 815

Found the problem at last. Turns out that Breezejs was the problem. My app is a single page application, and Breeze was one of the components of my SPA app (Breeze was installed as part of the Hot Towel template i was using). Not sure why, but when i uninstalled Breeze, the controllers i added to the project became visible. Something in the breeze scripts hi-jack the api routing.

Upvotes: 1

Erik Funkenbusch
Erik Funkenbusch

Reputation: 93444

You realize that "api/..." means "from the current relative location" right?

You probably want "/api/..." in your ajax call.

EDIT:

It's better to use a Url Helper.

$.getJSON('@Url.HttpRouteUrl("DefaultApi", new { controller = "CAApproval" })', function (data) {

Upvotes: 0

Are you hosting your web api in IIS or running it from Visual Studio. If IIS, /LucasNetApp/api/caaproval. If Visual Studio, /api/caaproval.

Upvotes: 0

Related Questions