La URL de ASP.Net WebAPI no devuelve ningún dato

Estoy usando la base de datos Northwind para tratar de comprender WebAPI para Asp.Net.

Mis archivos de Modelo/Controlador/Global se muestran a continuación.

Cuando navego a localhost: xxxx/api/employees/5, va correctamente al controlador correcto:

' GET /api/employees/5
Public Function GetValue(ByVal ID As Integer) As Employee
    Dim emp As Employee = db.Employees.Find(ID)
    Return emp
End Function

...sin embargo emp devuelve Nulo/Nada.

La base de datos Northwind definitivamente tiene datos:

Instantánea de Northwind

¿Alguien podría ver dónde me estoy equivocando, por favor?

Gracias, Mark


Modelos/Empleado.vb:

Imports System.Data.Entity

  Namespace MvcApplication21
  Public Class Employee
    Public Property EmployeeID() As Integer
    Public Property FirstName() As String
    Public Property LastName() As String
  End Class

  Public Class EmployeeDBContext
    Inherits DbContext
    Public Property Employees() As DbSet(Of Employee)
  End Class
End Namespace

Controladores/EmpleadosController.vb

Imports System.Web.Http
Imports MvcApplication21
Imports MvcApplication21.MvcApplication21

Public Class EmployeesController
Inherits ApiController

Private db As New EmployeeDBContext

' GET /api/employees
Public Function GetValues() As IEnumerable(Of String)
    Return New String() {"value1", "value2"}
End Function

' GET /api/employees/5
Public Function GetValue(ByVal EmployeeID As Integer) As Employee
    Dim employee As Employee = db.Employees.Find(EmployeeID)
    Return employee
End Function

Web.config:

<configuration>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

Global.asax.vb

Imports System.Web.Http
Imports System.Web.Optimization

Public Class WebApiApplication
 Inherits System.Web.HttpApplication

 Shared Sub RegisterGlobalFilters(ByVal filters As GlobalFilterCollection)
    filters.Add(New HandleErrorAttribute())
 End Sub

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

    routes.MapHttpRoute( _
        name:="DefaultApi", _
        routeTemplate:="api/{controller}/{id}", _
        defaults:=New With {.id = RouteParameter.Optional} _
    )

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

preguntado el 22 de mayo de 12 a las 16:05

las dos funciones GetValue que muestra en la parte superior y EmployeesController.vb son diferentes:

¿Cómo sabes que devuelve nulo? ¿Qué código estás usando para hacer la solicitud HTTP? ¿Ha intentado usar fiddler para ver la solicitud en el cable? -

Hola Darrell: sí, en Internet Explorer abre un archivo de texto y todo lo que contiene es NULL: la solicitud en las herramientas F12 para IE es: Solicitud de valor clave GET /api/employees/5 HTTP/1.1: el cuerpo de respuesta es nulo -

Nicholas, ¿te importaría explicar dónde son diferentes? Todos los ejemplos que puedo ver son para datos de memoria, no para bases de datos, por lo que si has notado una diferencia, te agradecería mucho si pudieras confirmar dónde me equivoqué. . Muchas gracias. -

Nicholas: si agrega sus comentarios como respuesta, lo marcaré como tal. Saludos, Marcos -

1 Respuestas

Hay un conflicto entre sus parámetros de enrutamiento y su parámetro de función

en la primera parte de tu pregunta tienes

Función pública GetValue (ByVal ID As Integer) como empleado

en el controlador es

Función pública GetValue (ByVal EmployeeID As Integer) como empleado

  • uno tiene ID como parámetro y el otro tiene EmployeeID como parámetro

Mientras que está utilizando ID en su enrutamiento

routes.MapHttpRoute( _         
   name:="DefaultApi", _         
   routeTemplate:="api/{controller}/{id}", _         
   defaults:=New With {.id = RouteParameter.Optional} _     
) 

contestado el 23 de mayo de 12 a las 12:05

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