¿Ruta MVC con Web-API (Error 404)?

Me está costando mucho averiguar por qué mi configuración de enrutamiento no funciona. Probé mysite/issues/500 y mysite/issues/ pero siempre obtengo un error 404. Puse un punto de interrupción en ambas funciones de obtención y nunca llega al punto de interrupción. Pensé que tal vez un vistazo podría ayudarme, pero traté de

Aquí está mi global.asax:

    Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Sub Application_Start()
        AreaRegistration.RegisterAllAreas()
        RouteTable.Routes.MapRoute("Issues", "{controller}/{id}", New With {.id = UrlParameter.Optional})
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
        RouteConfig.RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

Controlador:

Namespace Controllers


    Public Class IssuesController
        Inherits ApiController

        ' GET api/issues'
        Public Function GetValues(ByVal req As HttpRequestmessage) As IEnumerable(Of Issue)
            Dim querystrParams As NameValueCollection = Nothing
            Dim srch As IQuery
            If req.RequestUri.Query.Any() Then
                srch = New IssueTrackerQuery(req.RequestUri.ParseQueryString())
            End If
            Return (New EnumerableQuery(Of Issue)(New HashSet(Of Issue)))
        End Function

        ' GET api/issues/5'
        Public Function GetValue(ByVal IssuesId As Integer) As Issue
            Return New Issue()
        End Function

        ' POST api/issues'
        Public Sub PostValue(ByVal value As String)
            Throw New NotImplementedException()
        End Sub

        ' PUT api/issues/5'
        Public Sub PutValue(ByVal id As Integer, ByVal value As String)
            Throw New NotImplementedException()
        End Sub

        ' DELETE api/issues/5'
        Public Sub DeleteValue(ByVal IssuesId As Integer)
            Throw New NotImplementedException()
        End Sub

    End Class
End Namespace

preguntado el 12 de junio de 12 a las 20:06

1 Respuestas

No tiene ninguna ruta API en su Global.asax. Agrega uno usando el MapHttpRoute método de extensión (en lugar de MapRoute):

Sub Application_Start()
    AreaRegistration.RegisterAllAreas()
    RouteTable.Routes.MapHttpRoute("Issues", "{controller}/{id}", New With {.id = UrlParameter.Optional})
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
    RouteConfig.RegisterRoutes(RouteTable.Routes)
End Sub

Note la routes.MapHttpRoute que registra los controladores web api.

Respondido el 28 de diciembre de 12 a las 17:12

Muchas gracias Darín. ¡Eso fue todo! Sabía que tenía que ser algo pequeño, pero no me di cuenta de que estaba usando la función de ruta incorrecta :). - codificación4fun

También noté que MS coloca routeTemplate: "api/{controller}/{id}", y no estaba incluyendo "api/" en mi url al realizar la prueba. Leer esto me apuntó en la dirección correcta. ¡Gracias! - Denis M. Cocina

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.