gpt4 book ai didi

c# - 非 System.Web 替代 HttpPostedFileBase?

转载 作者:行者123 更新时间:2023-11-30 14:50:33 25 4
gpt4 key购买 nike

我正在尝试将一些 C# MVC 遗留代码移动到共享 DLL 中。到目前为止一切顺利,但有人问我共享 DLL 不需要以任何方式引用 System.Web

来自 System.Web 的 DLL 中使用的唯一类型是 HttpPostedFileBase:

public string ChangeAttachment(int userId, HttpPostedFileBase file)
{
string attachmentsFolderPath = ConfigurationManager.AppSettings["AttachmentsDirectory"];
if (!Directory.Exists(attachmentsFolderPath))
{
Directory.CreateDirectory(attachmentsFolderPath);
}

string fileTarget = Path.Combine(attachmentsFolderPath, userId.ToString() + Path.GetExtension(file.FileName));

if (File.Exists(fileTarget))
{
File.Delete(fileTarget);
}

file.SaveAs(fileTarget);

return fileTarget;
}

如您所见,这里不需要 HTTP 或 Web 功能,因为只使用了它的 FileNameSaveAs() 成员。

有没有一种替代方法可以让我在调用者处轻松地将HttpPostedFileBase转换成它,这样我需要作为参数传递的只是一个非网络文件?

注意:HttpPostedFileBase 直接继承自 System.Object,而不是任何文件类。

最佳答案

HttpPostedFileBase 是一个抽象类。因此,挑战在于您实际上并没有替换该类,而是替换了 HttpPostedFileWrapper,这是实现。 (这不是类继承的东西,而是从它继承的东西。)

HttpPostedFileWrapper 依次引用其他 System.Web 类,例如 HttpInputStream 和“HttpPostedFile”。

所以你不能替换它。也许要求您不要引用 System.Web 的意图是您要移动与 Web 功能(如业务逻辑)不直接相关的遗留代码。如果您不能将代码完全排除在外,也许您可​​以将它从正在创建的新程序集中排除,然后让另一个程序集引用 System.Web。如果他们不需要这个特定的功能,他们只引用一个程序集,但如果他们需要这个,那么他们也可以添加第二个引用 System.Web 的程序集。

关于c# - 非 System.Web 替代 HttpPostedFileBase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36249169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com