Данные MVC видны другим клиентам - PullRequest
0 голосов
/ 19 октября 2018

У меня мало опыта работы с MVC, поэтому я учусь по ходу дела и сталкиваюсь с некоторыми камнями преткновения.

Я начал разрабатывать веб-приложение MVC и только что закончил форму, которая вызывает веб-сервис дляполучить список адресов и заполняет опции выбора для каждого адреса.

Это работает нормально, однако я развернул его на тестовых серверах, и когда я запускаю сайт, он работает, однако, если мой коллега из другого клиента переходит на страницу, он отображает список данных, которые я запустил.Каждый звонок на сайт должен быть индивидуальным, поэтому не уверены, почему эти данные видны кому-то еще?

Представление (index.cshtml)

namespace AddressLookupSite.Controllers
{
public class AssistedController : Controller
{
    string postcode = "";
    string street = "";
    //model is the list of addresses to be returned to the user
    private static AddressList model = new AddressList();

    // GET: Assisted
    public ActionResult Index()
    {
        //this may need to be index,models.
        return View(model);
    }

    public ActionResult GetAddresses(string postcode)
    {
        if (postcode == null || postcode == "")
        {
            return RedirectToAction("/Index/");
        }
        //call Addresslookup web service
        AddressLookupWeb ew = new AddressLookupWeb();
        //extract address values from the XML returned from web service
        XmlNode xml = ew.GetAddress(", , , , " + postcode);

        foreach (XmlElement addressInfo in xml)
        {
            foreach (XmlElement teset in addressInfo["Addresses"])
            {
                //add each address item found to the list
                model.listone.Add(new AddressResults { FullAddress = teset["fulladdress"].InnerText });
            }
        }

        //return the list and model back to the index view
        return View("Index", model);


    }
}

Модель (AddressResults)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AddressLookupSite.Models
{
public class AddressResults
{
    public string FullAddress { get; set; }
}
}

Модель (AddressResults)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace AddressLookupSite.Models
{
public class AddressList
{
    public List<AddressResults> listone = new List<AddressResults>();
}
}

Представлениедовольно стандартный и обращается к модели, выводя содержимое модели для выбора, он также использует некоторый JavaScript для выполнения некоторого базового кода.

Проблема определенно на стороне сервера, она не должна позволять другому пользователю иметь возможностьперехватить форму, тем более что в форму позже будут включены личные данные.Это заставляет меня задуматься: если бы я занимался заполнением формы, а кто-то другой открыл страницу, то тогда бы они получили данные от контроллера, когда это не должно происходить так.

Любой совет оченьпризнателен, как я уже сказал, я новичок в этом и занимался только разработкой внутренних приложений для запуска процессов и т. д.

1 Ответ

0 голосов
/ 19 октября 2018

Вы определяете модель результата как static и присваиваете ее в строке:

//model is the list of addresses to be returned to the user
private static AddressList model = new AddressList();

Это означает, что будет только один экземпляр этого класса.Казалось бы, это причина того, что все получают одинаковые результаты.

Удалите статический объект или создайте экземпляр в методе, который будет его использовать.Любой из них предоставит каждому звонящему свою копию.

...