Ну, я наконец-то нашел способ, который действительно прост - наверное, я немного обдумал это.Я подумал, что просто поделюсь решением, так как это может понадобиться некоторым из вас.Я проверил это, и оно работает для меня.
Вам просто нужно create your own class
HttpPostedFileBaseDerived
, который наследуется от HttpPostedFileBase
.Единственная разница между ними состоит в том, что вы можете создать конструктор там.
public class HttpPostedFileBaseDerived : HttpPostedFileBase
{
public HttpPostedFileBaseDerived(int contentLength, string contentType, string fileName, Stream inputStream)
{
ContentLength = contentLength;
ContentType = contentType;
FileName = fileName;
InputStream = inputStream;
}
public override int ContentLength { get; }
public override string ContentType { get; }
public override string FileName { get; }
public override Stream InputStream { get; }
public override void SaveAs(string filename) { }
}
}
Поскольку constructor is not affected by ReadOnly
, вы можете легко copy in the values from your original file
объект to
ваш derived class's instance
, в то время как ваше новое имя будет выглядеть какхорошо:
HttpPostedFileBase renameFile(HttpPostedFileBase file, string newFileName)
{
string ext = Path.GetExtension(file.FileName); //don't forget the extension
HttpPostedFileBaseDerived test = new HttpPostedFileBaseDerived(file.ContentLength, file.ContentType, (newFileName + ext), file.InputStream);
return (HttpPostedFileBase)test; //cast it back to HttpPostedFileBase
}
Как только вы закончите, вы можете type cast
вернуться к HttpPostedFileBase
, чтобы вам не пришлось менять какой-либо другой код, который у вас уже есть.
Надеюсь, что этопомогает любому в будущем.Также спасибо Маноджу Чоудхари за его ответ, благодаря чему я узнал, где не искать решение.