Member 13698531 Ответов: 2

Создать INSERT или UPDATE, веб-API и возвращает ответ в JSON на почтальона


Привет,
Я хочу создать веб-API с помощью asp.net и вернуть ответ в формате JSON, как это
{"status":1,"message":"Insert Successfully"}.



Здесь я возвращаю msg в тексте .Помогите его вернуть в json.
и предложите мне создать crud api индивидуально с помощью asp.net


Заранее спасибо

Что я уже пробовал:

using apiforclient.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http;
using System.IO;
using System.Web.Mvc;

namespace apiforclient.Controllers
{
    public class chController : ApiController
    {
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        string message = "";
        [System.Web.Http.HttpPost]
        public HttpResponseMessage Post([FromBody] vendor vendor)
        {
            List<vendor> lsvendor = new List<vendor>();
            SqlConnection con = new SqlConnection(constr);
            string query = "(select * from vendor where vcode='" + vendor.vcode + "' and password='" + vendor.password + "' and vstatus='Active')";
            SqlDataAdapter sda = new SqlDataAdapter(query, con);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            try
            {
                if (dt.Rows.Count > 0)
                {
                    string query1 = "(select * from inbox where qref='" + vendor.qref + "')";
                    SqlDataAdapter sda1 = new SqlDataAdapter(query1, con);
                    DataTable dt1 = new DataTable();
                    sda1.Fill(dt1);
                    if (dt1.Rows.Count > 0)
                    {
                       
                        string srerep = dt1.Rows[0]["salesstatus"].ToString();
                        SqlCommand update = new SqlCommand("update inbox Set sales_status=@sales_status where qref = @qref", con);
                        con.Open();
                        update.Parameters.AddWithValue("sales_status",  srerep);
                        update.Parameters.AddWithValue("qref", vendor.qref);
                        update.ExecuteNonQuery();
                        update.Dispose();
                        message = "Product Updated Successfully";
                        con.Close();
                        return Request.CreateResponse(HttpStatusCode.OK, message);
                    }
                    else
                    {
                        return Request.CreateResponse(HttpStatusCode.OK, "No Record Found...!");
                    }
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.OK, "No Record Found...!");
                }
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
            }

            //return Request.CreateResponse(HttpStatusCode.OK, message);
        }

    }


}

Richard Deeming

Как только вы исправите SQL-инъекция[^] уязвимость в вашем коде, вы срочно нужно исправить ваше хранилище паролей.

В настоящее время вы храните пароли в виде обычного текста. Не делай этого.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]

2 Ответов

Рейтинг:
18

F-ES Sitecore

int status = 1;
string message = "Success";
return Request.CreateResponse(HttpStatusCode.OK, new { status, message });


Если ваши переменные называются как-то иначе, то;

int x = 1;
string y = "Success";
return Request.CreateResponse(HttpStatusCode.OK, new { status = x, message = y});


Рейтинг:
12

MadMyche

В то время как проблема, с которой Вы пришли сюда, была решена, есть, по крайней мере, еще одна проблема. SQL Injection Vulnerability.

string query = "(select * from vendor where vcode='" + vendor.vcode + "' and password='" + vendor.password + "' and vstatus='Active')";
Вы должны НИКОГДА создайте SQL-запрос, комбинируя команды с пользовательским вводом.
Да, данные, поступающие из API из надежного источника, считаются пользовательским вводом и являются подозрительными.

К сожалению, это очень распространенная проблема и остается одной из 10 лучших уязвимостей безопасности, хотя она была выявлена более 20 лет назад.
Однако хорошо то, что правильный способ объединения запросов и пользовательского ввода хорошо документирован, и в NET Framework это делается с помощью Объект sqlparameter[^] класс.

Применение параметров в вашем коде будет выглядеть примерно так
	SqlConnection con = new SqlConnection(constr);

//	string query = "(select * from vendor where vcode='" + vendor.vcode + "' and password='" + vendor.password + "' and vstatus='Active')";
	string query = "select * from vendor where vcode=@vcode and password=@password and vstatus='Active'";

	SqlCommand cmd = new SqlCommand(query, con);
	cmd.Paramaters.AddWithValue("@vcode", vendor.vcode);
	cmd.Paramaters.AddWithValue("@password", vendor.password);

//	SqlDataAdapter sda = new SqlDataAdapter(query, con);
	SqlDataAdapter sda = new SqlDataAdapter(cmd);

	DataTable dt = new DataTable();
Ссылка:
Класс SqlParameter (System.Data.SqlClient) | Microsoft Docs[^]