0

我有一个 MVC 4 应用程序,我想在其中使用 web api 来获取我的数据。编辑——这是一个以热毛巾模板开始的单页应用程序。问题是当我尝试从 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,我认为这是一个新手问题。只是不确定问题是什么。是否有配置或我缺少的东西?该项目是作为 MVC 4 / web api 应用程序创建的。

4

3 回答 3

1

终于发现问题了。事实证明,Breezejs 是问题所在。我的应用程序是一个单页应用程序,Breeze 是我的 SPA 应用程序的组件之一(Breeze 是作为我使用的热毛巾模板的一部分安装的)。不知道为什么,但是当我卸载 Breeze 时,我添加到项目中的控制器变得可见。微风脚本中的某些内容劫持了 api 路由。

于 2013-07-02T11:15:08.043 回答
0

你意识到“api/...”的意思是“从当前的相对位置”对吗?

您可能希望在您的 ajax 调用中使用“/api/...”。

编辑:

最好使用 Url Helper。

$.getJSON('@Url.HttpRouteUrl("DefaultApi", new { controller = "CAApproval" })', function (data) {
于 2013-07-01T16:23:05.163 回答
0

您是在 IIS 中托管 Web api 还是从 Visual Studio 运行它。如果是 IIS,/LucasNetApp/api/caaproval。如果是 Visual Studio,则为 /api/caaproval。

于 2013-07-01T16:42:31.337 回答