0

I need to pass 3 parameters to my API DELETE request. Here is my code what I have try.

TaskModel

public class TaskModel
{
    public int DeveloperID { get; set; }
    public int ProjectID { get; set; }
    public string WorkDate { get; set; }
}

This a controller class. called TaskController

    [Route("api/Task")]
    public void Delete(TaskModel value)
    {
        TaskPersistent tp = new TaskPersistent();
        tp.deleteTask(value);
    }

This is TaskPersistent.class

public void deleteTask(TaskModel task)
{
    try
    {
        string sqlString = "DELETE from devproj WHERE (DeveloperID, ProjectID, WorkDate) =  VALUES ('" + task.DeveloperID + "', '" + task.ProjectID + "', '" + task.WorkDate + "')"; // System.NullReferenceException throw
        MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sqlString, conn);
        cmd.ExecuteNonQuery();
        long x = cmd.LastInsertedId;
    }
    catch (MySqlException x)
    {
        int errr = x.Number;

        Console.WriteLine(errr);
    }
}

I consume this API using ARC rest client like this,http://localhost:2731/api/Task?DeveloperID=1&ProjectID=2&WorkDate="2018-03-14" But when I pass the parameters like this,API thrown exception: 'System.NullReferenceException' in DeleteAPI.dll (I commented error occurred line in my code). What I did wrong here.

8
  • Possible duplicate of What is a NullReferenceException, and how do I fix it? Commented Mar 14, 2018 at 10:38
  • You need to consume this API by posting your TaskModel as a body for the model binder to work with the way you have your Delete controller action set up. Alternatively, change the Delete method parameters to int developerId, int projectId, DateTime workDate Commented Mar 14, 2018 at 10:39
  • @VidmantasBlazevicius Can you give me it as a answer.please. Commented Mar 14, 2018 at 10:40
  • If your API method is for a delete action, a good practice is to add [HttpDelete] as attribute and send DELETE instead GET. Commented Mar 14, 2018 at 10:45
  • 1
    Yes, between [Route] attribute and method declaration [Route("api/Task")] [HttpDelete] public void Delete(TaskModel value) and so you can call with DELETE verbs instead of GET. Commented Mar 14, 2018 at 10:55

2 Answers 2

2

You need to consume this API by posting your TaskModel as a body for the model binder to work with the way you have your Delete controller action set up. Alternatively, change the Delete method parameters to int developerId, int projectId, DateTime workDate.

    [Route("api/Task")]
    public void Delete(int developerId, int projectId, DateTime workDate)
    {
        var taskModel = new TaskModel
        {
            DeveloperId = developerId,
            ProjectID = projectId,
            WorkDate = workDate
        };
        TaskPersistent tp = new TaskPersistent();
        tp.deleteTask(taskModel);
    }
Sign up to request clarification or add additional context in comments.

5 Comments

I gave a sample code of how to set up the controller to work with the way you are consuming it currently
Sir I try this, But when I try this,this exception occurred now, 'MySql.Data.MySqlClient.MySqlException' in MySql.Data.dll
@Gamma What is the exception you are getting and what is the runtime value now of sqlString variable? Please be as thorough as you can so we can help you properly.
Problem solved sir, I edited my query as User.Anonymous's answer. Thank you very much
@Gamma no problems, I am happy you have solved your issue
2
string sqlString = "DELETE from devproj WHERE (DeveloperID, ProjectID, WorkDate) =  VALUES ('" + task.DeveloperID + "', '" + task.ProjectID + "', '" + task.WorkDate + "')"; // System.NullReferenceException throw

This query don't work. SQL delete is :

string sqlString = $"DELETE from devproj WHERE DeveloperID = {task.DeveloperID} AND ProjectID = {task.ProjectID} AND WorkDate = {task.WorkDate}";

And don't forget to check for null value in your model before execute query.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.