无法使用jQuery Ajax从控制器调用webApi

时间:2016-08-28 13:09:43

标签: c# asp.net-mvc asp.net-web-api asp.net-web-api-routing

有很多与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 }
        );
    }
}

我的jQuery Ajax脚本就像这样

$('#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');
            }
        });
    });

每当我尝试调用web api时,我都会收到错误

enter image description here

请有人帮我解决问题。 谢谢

3 个答案:

答案 0 :(得分:2)

尝试将控制器重命名为shoppingCartController。据我所知,ASP.NET将查看请求,然后搜索名为request Controller的控制器。我总是试图通过添加Controller来保证安全。

答案 1 :(得分:0)

试试这个

 [HttpPost]
 [Route("/api/shoppingCart/getDetails")]
 public string getDetails()
 {
    return "HttpPost";
 }

如评论中所述,您还应在WebApiConfig

中添加以下行
 public static void Register(HttpConfiguration config)
 {
           //this line
            config.MapHttpAttributeRoutes();
    ....
 }

修改

正如其他一些答案所述,您还应遵循控制器的命名约定,例如ShoppingCartController

答案 2 :(得分:0)

您没有遵循控制器的命名约定

重命名您的控制器

public class ShoppingCartController : ApiController { ... }