Web api 2 со слоем доступа к данным, вызываемым методом контроллера web api. Получение ошибки приведения - PullRequest
1 голос
/ 10 марта 2020

Я получаю:

Невозможно привести объект типа 'System. Net .HttpResponseMessage к типу' System.Web.Http.IHttpActionResult

Метод контроллера web api2 вызывает уровень доступа к данным, который возвращает int. Сбой при приведении:

return (IHttpActionResult)httpResponse;

Код:

[HttpGet]
[Route("registeruser/{currentDateTime}/{userName}/{userPassword}/{ipAddress}/")]
public IHttpActionResult RegisterUser(DateTime currentDateTime, string userName, string userPassword, string ipAddress)
{
        try
        {
            HttpResponseMessage httpResponse;

            int returnValue = 0;

            returnValue = dataaccesslayer.RegisterUser(currentDateTime, userName, userPassword, ipAddress);

            httpResponse = Request.CreateResponse(HttpStatusCode.OK, returnValue);

            return (IHttpActionResult)httpResponse;
        }
        catch (Exception)
        {
            throw;
        }
}

Уровень доступа к данным, вызываемый методом контроллера web api2 - он возвращает int:

public int RegisterUser(DateTime currentDateTime, string userName, string userPassword, string ipAddress)
{
        int returnedValue = 0;

        try
        {
            dbFunc.OpenDB();

            SqlCommand cmd = new SqlCommand("dbo.RegisterUser", dbFunc.objConn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.AddWithValue("@a_CurrentDateTime", currentDateTime);
            cmd.Parameters.AddWithValue("@a_UserName", userName);
            cmd.Parameters.AddWithValue("@a_UserPassword", userPassword);
            cmd.Parameters.AddWithValue("@a_IpAddress", ipAddress);

            cmd.Parameters.Add("@a_UserIdOut", SqlDbType.Int);
            cmd.Parameters["@a_UserIdOut"].Direction = ParameterDirection.Output;

            cmd.ExecuteNonQuery();

            returnedValue = (int)cmd.Parameters["@a_UserIdOut"].Value;

            return returnedValue;
        }
        catch (SqlException sqlex)
        {
            throw sqlex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            // Close the database.
            dbFunc.CloseDB();
        }
}    

1 Ответ

1 голос
/ 10 марта 2020

Если вы хотите сохранить IHttpActionResult, попробуйте это:

[HttpGet]
[Route("registeruser/{currentDateTime}/{userName}/{userPassword}/{ipAddress}/")]
public IHttpActionResult RegisterUser(DateTime currentDateTime, string userName, string userPassword, string ipAddress)
{
    try
    {
        IHttpActionResult response;
        HttpResponseMessage httpResponse;

        int returnValue = 0;

        returnValue = dataaccesslayer.RegisterUser(currentDateTime, userName, userPassword, ipAddress);

        httpResponse = Request.CreateResponse(HttpStatusCode.OK, returnValue);

        response = ResponseMessage(httpResponse);
        return response;
    }
    catch (Exception)
    {
        throw;
    }
}

Если вы не можете удалить его, сделайте это так:

[HttpGet]
[Route("registeruser/{currentDateTime}/{userName}/{userPassword}/{ipAddress}/")]
public HttpResponseMessage RegisterUser(DateTime currentDateTime, string userName, string userPassword, string ipAddress)
{
    try
    {
        HttpResponseMessage httpResponse;

        int returnValue = 0;

        returnValue = dataaccesslayer.RegisterUser(currentDateTime, userName, userPassword, ipAddress);

        httpResponse = Request.CreateResponse(HttpStatusCode.OK, returnValue);

        return httpResponse;
    }
    catch (Exception)
    {
        throw;
    }
}

Для более подробного обсуждения между ними, проверьте эту ссылку здесь.

...