Asp.net mvc 4 MVC Can';找不到Web API控制器

Asp.net mvc 4 MVC Can';找不到Web API控制器,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我有一个MVC4应用程序,我想在其中使用WebAPI来获取我的数据。编辑-这是一个以热毛巾模板开始的单页应用程序。问题是,当我尝试从JSON调用控制器时,找不到404资源。这是我的控制器- Public Class CAApprovalController Inherits ApiController Public Function GetValues() As IEnumerable(Of String) Return New String() {"v

我有一个MVC4应用程序,我想在其中使用WebAPI来获取我的数据。编辑-这是一个以热毛巾模板开始的单页应用程序。问题是,当我尝试从JSON调用控制器时,找不到404资源。这是我的控制器-

 Public Class CAApprovalController
     Inherits ApiController

     Public Function GetValues() As IEnumerable(Of String)
         Return New String() {"value1", "value2"}
    End Function
 End Class
这是我的JSON调用-

 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();
     });
 }
这是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
我不熟悉MVC,尤其是web api,我认为这是一个新手问题。只是不确定问题出在哪里。是否有配置或我缺少的东西?该项目是作为MVC4/WebAPI应用程序创建的。

您知道“api/…”表示“从当前相对位置”对吗

您可能希望在ajax调用中使用“/api/…”

编辑:

最好使用Url帮助器

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

您是在IIS中托管web api还是在Visual Studio中运行它。如果是IIS,/LucasNetApp/api/caaproval。如果Visual Studio,/api/caaproval.

最终发现了问题。结果发现问题出在Breezejs身上。我的应用程序是一个单页应用程序,Breeze是我SPA应用程序的组件之一(Breeze是作为我使用的热毛巾模板的一部分安装的)。不知道为什么,但当我卸载Breeze时,我添加到项目中的控制器变得可见。breeze脚本中的某些内容可以帮助jack实现api路由。

我也尝试过。不过,当我在Chrome中查找时,我仍然没有找到资源。@Chris-这个项目是根项目吗?还是在根目录的子文件夹中?@Chris,好吧,您需要在ajax请求中使用完整路径。我有一个解决方案文件夹,我在其中创建了MVC web应用程序。因此,解决方案文件夹称为LucasNetSolution,web应用程序称为LucasNetApp。控制器名为CAApprovalController。那么,如果我想在web浏览器中尝试这一点,那么我会使用什么url呢。如果我理解正确,控制器在项目中的位置并不重要,对吗?我正在Visual Studio中运行本地开发服务器/api/caaproval找不到。我的答案有错/api/caapproval应该有效。类型<代码>http://localhost:/api/caapproval在IE的地址栏中,查看它是否可以返回JSON。如果这样做有效,jQuery也必须工作。仍然没有找到资源抱歉,没有线索。如果在controllers文件夹中有一个controller类,比如从ApiController派生的xyzcontroller,其routeTemplate为“api/{controller}/{id}”,那么HTTP GET到uri/api/xyz必须映射到公共作用域的操作方法,该方法的名称以GET开头,并且没有任何参数。我唯一的建议是查看VS输出窗口,看看web API跟踪是否能提供任何见解。我看到您已经启用了跟踪功能。谢谢Badri。我会继续找的,我们找到了同样的东西。你知道如何添加“api/{controller}/{id}”路由而不删除Breeze吗?