October 24, 2024
Chicago 12, Melborne City, USA
javascript

Gathering client side info with model and controller with custom api, results in 500 server error


I have a quiz where I need to gather some user actions and then save them into a database but I’m encountering a 500 Internal server error, somehow my setup might be wrong or I’m not doing things correctly yet, it’s my first time doing more backend stuff.

For this I create a model, QuizResultsModel.cs:

namespace Quiz.Model { public class QuizResultsModel { public int UserId { get; set; } public int Score { get; set; } public int SuccessCount { get; set; } public int FailCount { get; set; } public DateTime DateAttempted { get; set; } public TimeSpan TimeTaken { get; set; } } }

The controller, QuizResultsController:

namespace Quiz.Controllers { [RoutePrefix("someapi/Quiz")] public class QuizResultsController : ApiController { [HttpPost] [Route("SaveQuizResults")] public IHttpActionResult SaveQuizResults(QuizResultsModel quizResult) { var result = QuizService.SaveQuizResult(quizResult); return Ok(result); } } }

The class to make the SQL query, QuizService.cs:

`namespace Quiz.Service
{
public class QuizService
{
public static ResponseStatus SaveQuizResult(QuizResultsModel quizResult)
{
ResponseStatus responseStatus = new ResponseStatus();
string sql = @"INSERT INTO QuizResults (UserId, SuccessCount, FailCount, Score, DateAttempted, TimeTaken)
VALUES (@UserId, @SuccessCount, @FailCount, @Score, @DateAttempted, @TimeTaken);
SELECT SCOPE_IDENTITY();";

        try
        {
            using (var connection = new SqlConnection(Database.CreateConnection().ConnectionString))
            using (var command = new SqlCommand(sql, connection))
            {
                command.Parameters.AddWithValue("@UserId", quizResult.UserId);
                command.Parameters.AddWithValue("@SuccessCount", quizResult.SuccessCount);
                command.Parameters.AddWithValue("@FailCount", quizResult.FailCount);
                command.Parameters.AddWithValue("@Score", quizResult.Score);
                command.Parameters.AddWithValue("@DateAttempted", quizResult.DateAttempted);
                command.Parameters.AddWithValue("@TimeTaken", quizResult.TimeTaken);

                connection.Open();
                var quizResults = command.ExecuteScalar();
                responseStatus.HttpStatusCode = HttpStatusCode.OK;
                responseStatus.HttpStatusMessage = "Quiz result saved successfully " + quizResults;
            }
        }
        catch (Exception ex)
        {
            responseStatus.HttpStatusCode = HttpStatusCode.InternalServerError;
            responseStatus.HttpStatusMessage = ex.Message;
        }

        return responseStatus;
    }
}

}`

We are also required to register the API on the platform QuizRegistration.cs:

`namespace Quiz.App_Start
{
public class QuizRegistration : APIRegistrationBase
{
protected override List ControllerVersions =>
new List()
{
nameof(QuizResultsController)
};

    protected override string CurrentControllerVersion => nameof(QuizResultsController);

    protected override string ControllerName => "Quiz";
}

}`

Maybe my connection variable isn’t grabbing the database connection credentials or this may not be the correct way to set up an MVC?



You need to sign in to view this answers

Leave feedback about this

  • Quality
  • Price
  • Service

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video