La URL de ASP.Net WebAPI no devuelve ningún dato
Frecuentes
Visto 1,709 veces
1
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:
¿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
1 Respuestas
1
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 asp.net asp.net-mvc asp.net-web-api or haz tu propia pregunta.
las dos funciones GetValue que muestra en la parte superior y EmployeesController.vb son diferentes: Nicholas Murray
¿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? - Darrel Miller
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 - Mark
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. - Mark
Nicholas: si agrega sus comentarios como respuesta, lo marcaré como tal. Saludos, Marcos - Mark