es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué este método de Linq lanza una excepción de referencia nula?

Tengo un BaseApiController del que mi controlador hereda. Anula el método Initialize. El método recuperará un token JWT del HttpControllerContext y lo usará para recuperar el usuario que realiza la solicitud.

public class BaseApiController : ApiController
{
    public static tUser CurrentUser;
    public BaseApiController()
    {

    }

    protected override void Initialize(HttpControllerContext controllerContext)
    {
        base.Initialize(controllerContext);

        var request = controllerContext.Request;
        if (request.Headers.Authorization != null && request.Headers.Authorization.Scheme.Equals("bearer", StringComparison.OrdinalIgnoreCase))
        {
            CurrentUser = Helpers.JwtAuthentication.UserToken(request.Headers.Authorization.Parameter);
        }
    }
}    

El error ocurre intermitentemente al llamar al método UserToken. Aquí está el método.

public static tUser UserToken(string token)
{
    string username = ExtractUserName(token);

    if (string.IsNullOrEmpty(username))
        return null;

    try
    {
        tUser user = Repository.DB.tUsers.Where(u => u.UserName == username && u.IsDeleted == false).FirstOrDefault();
        return user;
    }
    catch (Exception ex)
    {
        return null;
    }
}

La excepción se lanza en la línea tUser user = Repository.DB.tUsers.Where(u => u.UserName == username && u.IsDeleted == false).FirstOrDefault(); y no puedo saber por qué. Si examino los distintos objetos en la línea de código, no son nulos. Si ejecuto nuevamente el depurador sobre la línea de código, se ejecuta sin problemas.

¿Por qué esta línea de código a veces lanza el error ‘Object reference is not sent to an instance of an object’?

public class Repository
{
    public static Entities DB = new Entities(ConfigurationManager.AppSettings["ConnectionString"].ToString());
}

public partial class Entities : DbContext
{
    public Entities(string secret) : base(Helpers.KeyVault.GetSecret(secret))
    {
        this.Configuration.LazyLoadingEnabled = false;
    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error es “Referencia a objeto no establecida como instancia de un objeto”. Esto significa que una referencia de objeto apunta a un valor nulo, y estás intentando utilizarlo como si fuera una instancia de un objeto. El problema puede ser que el DbContext se esté inicializando con un valor nulo intermitentemente.

    Puedes intentar agregar comprobaciones adicionales de nulos para asegurarte de que el DbContext no sea nulo antes de utilizarlo para hacer consultas en la base de datos. También puedes intentar depurar el código para ver si puedes reproducir el error consistentemente e investigar más. También puedes intentar actualizar el DbContext o la conexión a la base de datos para ver si eso resuelve el problema.

Comments are closed.