Создайте пользовательскую страницу ошибки в идентификаторе локального хоста asp.net

у меня есть страница сведений о заказе клиента. Когда клиент щелкает ссылку «просмотреть подробности», он будет перенаправлен на «http://localhost:1958/Admin/OrderDetails.aspx?Id=1"

Однако, когда я (как клиент) пытаюсь изменить идентификатор, например, на «2», он по-прежнему показывает сведения о покупателе с идентификатором № 2 (это сведения о заказе другого клиента). Я хочу, чтобы у меня была ошибка, например ошибка 404, когда клиент пытается изменить идентификатор на локальном хосте.

это страница моего заказадетали клиента:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(Request.QueryString["Id"]))
        {
            string TransactionNo = Request.QueryString["Id"];

            ucCustomerOrder11.TransactionNoText = TransactionNo;
        }

            ucCustomerOrder11.IsAuthorizedToAddStatus = false;

        }
    }

это код внутри моей страницы управления пользователями:

public partial class ucCustomerOrder1 : System.Web.UI.UserControl
{
    public bool CanIUpdateStatus;

    public string TransactionNoText
    {
        get { return txtTransactionNo.Text; }
        set { txtTransactionNo.Text = value; }
    }
    public bool IsAuthorizedToAddStatus
    {
        set { CanIUpdateStatus = value; }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["IslandGasAdmin/ST"] == null)
            {
                txtTransactionNo.ReadOnly = true;
                btnGo.Visible = false;
            }
            else
            {
                txtTransactionNo.ReadOnly = false;
                btnGo.Visible = true;
            }
            if (txtTransactionNo.Text != string.Empty)
            {
                ShowOrderDetails(rblOrderDetails.SelectedValue, Convert.ToInt32(txtTransactionNo.Text));
            }
            else
            {
                rblOrderDetails.Visible = false;
                Panel1.Visible = false;
                Panel2.Visible = false;
                Panel3.Visible = false;
                Panel4.Visible = false;
            }
        }
    }

    private void ShowOrderDetails(string PanelId, int OrderNo)
    {
        Panel1.Visible = false;
        Panel2.Visible = false;
        Panel3.Visible = false;
        Panel4.Visible = false;
        rblOrderDetails.Visible = false;

        if (IsOrderNoValid(OrderNo))
        {
            rblOrderDetails.Visible = true;
            if (PanelId == "1")
            {
                ShoppingCart k = new ShoppingCart
                {
                    Flag = OrderNo
                };
                DataTable dtCustomerDetails = k.GetOrderList();

                if (dtCustomerDetails.Rows.Count > 0)
                {
                    Panel1.Visible = true;
                    lblCustomerName.Text = Convert.ToString(dtCustomerDetails.Rows[0]["CustomerName"]);
                    lblCustomerPhoneNo.Text = Convert.ToString(dtCustomerDetails.Rows[0]["CustomerPhoneNo"]);
                    lblCustomerEmailID.Text = Convert.ToString(dtCustomerDetails.Rows[0]["CustomerEmailID"]);
                    lblTotalPrice.Text = String.Format("{0:#,000.00}",dtCustomerDetails.Rows[0]["TotalPrice"]);
                    lblTotalProducts.Text = Convert.ToString(dtCustomerDetails.Rows[0]["TotalProducts"]);
                    txtCustomerAddress.Text = Convert.ToString(dtCustomerDetails.Rows[0]["CustomerAddress"]);
                    lblPaymentMethod.Text = Convert.ToString(dtCustomerDetails.Rows[0]["PaymentMethod"]);
                }
            }
            if (PanelId == "2")
            {
                Panel2.Visible = true;

                ShoppingCart k = new ShoppingCart()
                {
                    Flag = OrderNo
                };

                dlProducts.DataSource = k.GetTransactionDetails(); ;
                dlProducts.DataBind();
            }
            if (PanelId == "3")
            {
                Panel3.Visible = true;
                DropDownStatus.Visible = CanIUpdateStatus;
                txtStatus.Visible = false;
                //txtStatus.Visible = CanIUpdateStatus;
                btnAdd.Visible = CanIUpdateStatus;
                GetSetOrderStatus(0);
            }
        }
        else
        {
            Panel4.Visible = true;
        }
    }
    private bool IsOrderNoValid(int OrderNo)
    {
        ShoppingCart k = new ShoppingCart
        {
            Flag = OrderNo
        };
        DataTable dtCustomerDetails = k.GetOrderList();

        if (dtCustomerDetails.Rows.Count > 0)
            return true;
        else
            return false;
    }
    private void GetSetOrderStatus(int Flag)
    {
        ShoppingCart k = new ShoppingCart
        {
            OrderStatus = DropDownStatus.SelectedValue,
            OrderNo = txtTransactionNo.Text,
            Flag = Flag
        };
        DataTable dt = k.GetSetOrderStatus();

        gvOrderStatus.DataSource = dt;
        gvOrderStatus.DataBind();
        //txtStatus.Text = string.Empty;
        //DropDownStatus.SelectedValue = string.Empty;

    }

person Paolo Duhaylungsod    schedule 28.05.2016    source источник
comment
Пожалуйста, уточните, что вы хотите сделать. У администратора не должно быть доступа к просмотру клиента с ID=2, или чего вы пытаетесь достичь?   -  person Hypnobrew    schedule 28.05.2016
comment
проблема на стороне клиента. Когда клиент нажимает на сведения о просмотре: отображается localhost:1958/Admin/OrderDetails.aspx. ?Id=1. если клиент меняет идентификатор = 2, он все равно показывает детали (от другого клиента).   -  person Paolo Duhaylungsod    schedule 28.05.2016
comment
Тогда я бы сказал, что у вас есть 2 варианта: 1. Реализовать правильную обработку авторизации 2. Быстрая и грязная версия, где вы смотрите в своем OrderDetails.aspx, если вошедший в систему клиент видит правильного клиента. Если нет, перенаправьте на 404.aspx. Кстати, 403 запрещено, вероятно, более уместно.   -  person Hypnobrew    schedule 28.05.2016
comment
@PaoloDuhaylungsod: у вас должна быть эта проверка на стороне кода.   -  person Sagar R    schedule 28.05.2016
comment
@SagarR, не могли бы вы дать мне хорошую идею, сэр?   -  person Paolo Duhaylungsod    schedule 28.05.2016
comment
@Hypnobrew, я выбираю быструю версию. Можете ли вы привести пример, сэр, пожалуйста?   -  person Paolo Duhaylungsod    schedule 28.05.2016
comment
@PaoloDuhaylungsod: я предполагаю, что вы уже определили роли, поскольку вы уже говорите, что у вас есть администратор и клиент, два разных типа пользователей, поэтому, согласно вашему вопросу, вы не хотите показывать запись, которая содержит ID = 2, так что вы можно сделать так: при загрузке страницы поставьте простое условие, может ли текущий клиент получить доступ к этому идентификатору или нет, если да, то покажите свою страницу, иначе перенаправьте на вашу пользовательскую страницу.   -  person Sagar R    schedule 28.05.2016
comment
есть еще одна проблема @SagarR. один клиент имеет несколько идентификаторов заказов. например, у клиента 5 заказов. (Идентификатор 1,3,5,10,11)   -  person Paolo Duhaylungsod    schedule 28.05.2016
comment
@PaoloDuhaylungsod: это не проблема, вы можете проверить что-то вроде, найти все OrderId (IE CustId = 2 может иметь OrderID = {1,3,5,7}), но все эти идентификаторы заказов будут иметь одного и того же клиента. проверить, содержит ли Current CustomerID данный OrderID или нет?   -  person Sagar R    schedule 28.05.2016
comment
@PaoloDuhaylungsod: тебе это помогло?   -  person Sagar R    schedule 28.05.2016
comment
понятия не имею, как это сделать. отредактирует вопрос и включит мой код @SagarR   -  person Paolo Duhaylungsod    schedule 28.05.2016
comment
@PaoloDuhaylungsod: Это здорово ... некоторый код сделает вопрос более богатым.   -  person Sagar R    schedule 28.05.2016
comment
отредактировано, сэр @SagarR, надеюсь, вы мне поможете   -  person Paolo Duhaylungsod    schedule 28.05.2016
comment
@PaoloDuhaylungsod: пожалуйста, проверьте ответ.   -  person Sagar R    schedule 28.05.2016


Ответы (1)


Я не получаю точно вашу страницу управления пользователем, но условие, которое я изменил в соответствии с предыдущим сообщением, так что вы можете попробовать что-то это,

protected void Page_Load(object sender, EventArgs e)
    {
         int UserId= Convert.ToInt32(Session["UserId"].ToString());    //Here I am assuming you are taking CustomerID in some session.
         int OrderID = Convert.ToInt32(Request.QueryString["Id"]); //Your orderID

         int CustId= "Query : Select CustomerID from sometable where OrderID=Your Above OrderID"   //Now Query to get CustomerID from Current OrderID

        if (UserId==CustId) //Check condition
        {

            ucCustomerOrder11.TransactionNoText = UserId;
            ucCustomerOrder11.IsAuthorizedToAddStatus = true;
        }
        else
        {
            ucCustomerOrder11.IsAuthorizedToAddStatus = false;
            Response.Redirect("CustomPage.aspx"); // for show message regarding not authorised access.
        }
    }
person Sagar R    schedule 28.05.2016
comment
авторизован добавить статус по другому поводу, сэр. - person Paolo Duhaylungsod; 28.05.2016