无法使用 jQuery Ajax 从控制器调用 Web Api
Not able to call webApi from controller using jQuery Ajax
有很多与未调用 webApi 相关的问题,但我尝试了所有解决方案,但无法为我的问题找到正确的解决方案。
我有一个像这样的 webApi
public class shoppingCart : ApiController
{
[HttpPost]
public string getDetails()
{
return "HttpPost";
}
[HttpGet]
public string getDetails1()
{
return "HttpGet";
}
[HttpPut]
public string getDetails2()
{
return "HttpPut";
}
[HttpDelete]
public string getDetails3()
{
return "HttpDelete";
}
}
我的global.asax.cs文件是这样的
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}
我的WebApiConfig.cs文件是这样的
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我的routeConfig.cs文件是这样的
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我的jQueryAjax脚本是这样的
$('#btnAjax').click(function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/api/shoppingCart/getDetails',
success: function (returnData) {
alert('success');
},
error: function (xhr, ajaxOptions, thrownError) {
alert('error');
}
});
});
每当我尝试调用网络时 api 我都会收到错误消息
请有人帮我解决这个问题。
谢谢
这样试试
[HttpPost]
[Route("/api/shoppingCart/getDetails")]
public string getDetails()
{
return "HttpPost";
}
如评论中所述,您还应该在 WebApiConfig
中添加以下行
public static void Register(HttpConfiguration config)
{
//this line
config.MapHttpAttributeRoutes();
....
}
编辑:
正如其他一些答案所述,您还应该遵循控制器的命名约定,例如 ShoppingCartController
尝试将您的控制器重命名为 shoppingCartController
。据我所知,ASP.NET 将查看请求,然后搜索名称为 request + Controller
的控制器。我总是通过添加 Controller 来确保安全。
您没有遵循控制器的命名约定
重命名你的控制器
public class ShoppingCartController : ApiController { ... }
有很多与未调用 webApi 相关的问题,但我尝试了所有解决方案,但无法为我的问题找到正确的解决方案。 我有一个像这样的 webApi
public class shoppingCart : ApiController
{
[HttpPost]
public string getDetails()
{
return "HttpPost";
}
[HttpGet]
public string getDetails1()
{
return "HttpGet";
}
[HttpPut]
public string getDetails2()
{
return "HttpPut";
}
[HttpDelete]
public string getDetails3()
{
return "HttpDelete";
}
}
我的global.asax.cs文件是这样的
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}
我的WebApiConfig.cs文件是这样的
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我的routeConfig.cs文件是这样的
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
我的jQueryAjax脚本是这样的
$('#btnAjax').click(function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/api/shoppingCart/getDetails',
success: function (returnData) {
alert('success');
},
error: function (xhr, ajaxOptions, thrownError) {
alert('error');
}
});
});
每当我尝试调用网络时 api 我都会收到错误消息
请有人帮我解决这个问题。 谢谢
这样试试
[HttpPost]
[Route("/api/shoppingCart/getDetails")]
public string getDetails()
{
return "HttpPost";
}
如评论中所述,您还应该在 WebApiConfig
public static void Register(HttpConfiguration config)
{
//this line
config.MapHttpAttributeRoutes();
....
}
编辑:
正如其他一些答案所述,您还应该遵循控制器的命名约定,例如 ShoppingCartController
尝试将您的控制器重命名为 shoppingCartController
。据我所知,ASP.NET 将查看请求,然后搜索名称为 request + Controller
的控制器。我总是通过添加 Controller 来确保安全。
您没有遵循控制器的命名约定
重命名你的控制器
public class ShoppingCartController : ApiController { ... }