ajax调用总是指向我的web api中的相同方法

ajax调用总是指向我的web api中的相同方法,ajax,asp.net-web-api,asp.net-web-api-routing,Ajax,Asp.net Web Api,Asp.net Web Api Routing,编辑:根据Felipe的回答,我将webapiconfig中的代码更改为以下内容,效果非常好- config.Routes.MapHttpRoute( _ name:="DefaultApi", _ routeTemplate:="api/{controller}/{action}/{id}", _ defaults:=New With {.id = RouteParameter.Optional} _ ) con

编辑:根据Felipe的回答,我将webapiconfig中的代码更改为以下内容,效果非常好-

         config.Routes.MapHttpRoute( _
        name:="DefaultApi", _
        routeTemplate:="api/{controller}/{action}/{id}", _
        defaults:=New With {.id = RouteParameter.Optional} _
    )
    config.Routes.MapHttpRoute(name:="API Default", routeTemplate:="api/{controller}/{action}/{id}", defaults:=New With { _
.id = RouteParameter.[Optional] _
})

我有一个带有4个函数的web api控制器-

     <HttpGet> _
<ActionName("AllCerts")> _
Public Function GetCerts() As Object
    Dim LWCERTS As Array = objCert.GetCertificates
    Return LWCERTS
End Function


<HttpGet> _
<ActionName("MyCerts")> _
Public Function GetMyCert() As Object

    Dim lwMyCerts As Array = objCert.GetCertificates(Utilities.GetLogin())

    Return lwMyCerts

End Function

<HttpGet> _
<ActionName("GetValueDDA")> _
Public Function GetDDABanks()
    Dim objDDABankNum As New LucasEntities.Business.EF_DDA
    Dim lwDDABankNum As Array = objDDABankNum.GetDDABankJSON()

    Return lwDDABankNum

End Function
'' POST api/caapproval
<HttpPost> _
<ActionName("CertDtlsByID")> _
Public Function Post(value As CertDetailModel) As Object
    Dim objCertPosting As New LucasEntities.Business.EF_CertificatePosting
    Dim lwMyCertDetails As String = objCertPosting.GetBorrowingBaseAdvanceRequestJSON()

    Return lwMyCertDetails

End Function
这是我的RouteConfig课程-

 Public Class RouteConfig
Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")


    routes.MapRoute( _
        name:="Default", _
        url:="{controller}/{action}/{id}", _
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )
End Sub
末级

当我在控制器中放置断点时,我看到CertDtlsByID actionName下的Post函数总是在运行,而不是AllCerts actionName下的GetCerts。作为web api和路由的新手,我做错了什么导致总是调用“Post”方法

当我直接在浏览器中运行web api时,Chrome显示以下错误-

 Multiple actions were found that match the request: System.Object GetCerts() on type LucasNetApp.CAApprovalController System.Object GetMyCert() on type LucasNetApp.CAApprovalController System.Object GetDDABanks() on type LucasNetApp.CAApprovalController

在asp.net web api中,路由由
App\u Start
文件夹中的
WebApiConfig.cs
文件控制。
ActionName
属性不起作用,因为它是asp.net mvc的行为

打开
WebApiConfig.cs
文件,尝试添加这些路由配置:

config.Routes.MapHttpRoute(name:="DefaultApiGet",
                           url:="api/{controller}",
                           defaults:=New With {.action = "Get"},
                           constraints:=new With {.httpMethod = new HttpMethodConstraint(HttpMethod.Get)})

config.Routes.MapHttpRoute(name:="DefaultApiWithAction",
                           url:="api/{controller}/{action}")
我不确定Vb.Net中的
sintaxe,在
C#
中看起来是相同的代码:

config.Routes.MapHttpRoute(name:="DefaultApiGet",
                           url:="api/{controller}",
                           defaults:=New With {.action = "Get"},
                           constraints:=new With {.httpMethod = new HttpMethodConstraint(HttpMethod.Get)})

config.Routes.MapHttpRoute(name:="DefaultApiWithAction",
                           url:="api/{controller}/{action}")
config.Routes.MapHttpRoute("DefaultApiGet",
                           "api/{controller}",
                           new {action = "Get"},
                           new {httpMethod = new HttpMethodConstraint(HttpMethod.Get)});

config.Routes.MapHttpRoute("DefaultApiWithAction",
                           "api/{controller}/{action}");