无法使用 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 { ... }