Конструктор типа System.Web.HttpPostedFile не найден - PullRequest
2 голосов
/ 17 декабря 2009

Я пытаюсь создать экземпляр HttpPostedFile с

var obj2 = Activator.CreateInstance(
    typeof(HttpPostedFile), 
    BindingFlags.NonPublic | BindingFlags.Instance,
    null,
    new object[] { },
    System.Globalization.CultureInfo.CurrentCulture
);

но я получаю ошибку "Конструктор типа" System.Web.HttpPostedFile "не найден".

Есть ли другой способ создать экземпляр HttpPostedFile или я что-то не так делаю?

Ответы [ 4 ]

5 голосов
/ 09 сентября 2011

У меня была такая же проблема, и я решил ее с помощью Moq следующим образом

var postedfile = new Mock<HttpPostedFileBase>();
postedfile.Setup(f => f.ContentLength).Returns(8192);
postedfile.Setup(f => f.FileName).Returns("myfile.txt");
postedfile.Setup(f => f.InputStream).Returns(new MemoryStream(8192));
myObject.HttpPostedFile = postedfile.Object;
4 голосов
/ 17 декабря 2009

Вместо этого вы можете использовать System.Web.HttpPostedFileBase. Он имеет те же методы, что и HttpPostedFile, но предназначен для подклассов. Затем вы можете использовать HttpPostedFileWrapper для передачи реального HttpPostedFile методу, ожидающему HttpPostedFileBase.

Эти дополнительные классы находятся в сборке System.Web.Abstractions. ASP.NET MVC использует это (и другие абстракции в той же сборке), чтобы упростить модульное тестирование. См. документацию по MSDN для получения дополнительной информации.

2 голосов
/ 17 декабря 2009

HttpPostedFile имеет внутренний конструктор, который принимает 3 аргумента и не предназначен для вызова из вашего кода:

internal HttpPostedFile(string filename, string contentType, HttpInputStream stream)

Чтобы создать экземпляр этого класса, вам нужно будет передать имя файла, тип содержимого и экземпляр HttpInputStream, который также является внутренним типом, поэтому единственный способ создать его экземпляр - это отражение.

0 голосов
/ 17 декабря 2009

HttpPostedFile не предоставляет общедоступных конструкторов, он доступен с элементом управления загрузкой файлов.

Я думаю, вам следует использовать какой-то другой класс, так что именно вы пытаетесь сделать с HttpPostedFile?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...