Ungültige Cast Exception in HttpFileCollection
-
19-09-2019 - |
Frage
Ich habe eine Erweiterungsmethode unten, aber wenn ich diese laufen, gibt die foreach mich InvalidCastException
und es sagt *
Kann nicht Gussobjekt des Typs 'System.String' type 'System.Web.HttpPostedFile'.
Code:
public static List<Attachment> GetFiles(this HttpFileCollection collection) {
if (collection.Count > 0) {
List<Attachment> items = new List<Attachment>();
foreach (HttpPostedFile _file in collection) {
if (_file.ContentLength > 0)
items.Add(new Attachment()
{
ContentType = _file.ContentType,
Name = _file.FileName.LastIndexOf('\\') > 0 ? _file.FileName.Substring(_file.FileName.LastIndexOf('\\') + 1) : _file.FileName,
Size = _file.ContentLength / 1024,
FileContent = new Binary(new BinaryReader(_file.InputStream).ReadBytes((int)_file.InputStream.Length))
});
else
continue;
}
return items;
} else
return null;
}
Vielen Dank im Voraus.
MSDN sagt:
kodieren Clients Dateien und übertragen sie in dem Inhaltskörper unter Verwendung mehrteiliger MIME-Format mit einem HTTP-Content-Type Header von multipart / form-data. ASP.NET Extrakte der kodierten Datei (en) aus der Inhaltskörper in einzelne Mitglieder ein HttpFileCollection. Methoden und Eigenschaften der Klasse HttpPostedFile Zugang zu den Inhalten und Eigenschaften jeder Datei.
Lösung
Wenn Sie auf dieser Seite im Codebeispiel sehen, es zeigt, wie Sie die Sammlung aufzählen sollte, Sie sind in der Tat eine Reihe bekommen, wenn Sie versuchen, aufzuzählen, wie Sie sind.
http://msdn.microsoft.com/en- us / library / system.web.httpfilecollection.aspx
Andere Tipps
Die HttpFileCollection
Sammlung Enumerator zurück Tasten. Sie müssen die Schlüssel in jeder Iteration der Schleife verwenden, um den zugehörigen HttpPostedFile
Objekt. So Ihre Schleife Bedürfnisse wie folgt aussehen:
foreach (string name in collection) {
HttpPostedFile _file = collection[name];
// ...rest of your loop code...
}
Nun, ich habe eine Lösung gefunden, aber es sieht so dumm, aber es funktioniert.
Ich habe einfach die foreach
mit dieser Änderung:
foreach (string fileString in collection.AllKeys) {
HttpPostedFile _file = collection[fileString];
if (_file.ContentLength > 0)
items.Add(new Attachment()
{
ContentType = _file.ContentType,
Name = _file.FileName.LastIndexOf('\\') > 0 ? _file.FileName.Substring(_file.FileName.LastIndexOf('\\') + 1) : _file.FileName,
Size = _file.ContentLength / 1024,
FileContent = new Binary(new BinaryReader(_file.InputStream).ReadBytes((int)_file.InputStream.Length))
});
else
continue;
}
HttpFileCollection hfc = Request.Files;
for (int i = 0; i < hfc.Count; i++)
{
HttpPostedFile hpf = hfc[i];
if (hpf.ContentLength > 0)
{
string _fileSavePath = _DocPhysicalPath + "_" + hpf.FileName;
}
}