Asp.net mvc 4 MVC Can';找不到Web API控制器
我有一个MVC4应用程序,我想在其中使用WebAPI来获取我的数据。编辑-这是一个以热毛巾模板开始的单页应用程序。问题是,当我尝试从JSON调用控制器时,找不到404资源。这是我的控制器-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
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吗?