处理公共功能

本文关键字:功能 处理 | 更新日期: 2023-09-27 18:17:25

我正在使用实体框架代码优先制作一个包含类别、品牌和产品实体的产品管理系统。在对任何模型执行CRUD操作时,都有一个共同的要求,即上传和删除图像。

现在,我已经将代码直接插入到我的类别控制器中。现在,在为Brands开发CRUD功能时,我意识到我也需要在Brand控制器中复制相同的上传和删除代码。这将工作得很好,但它只会复制品牌和产品控制器中的代码。

我怎么能确保我写一次代码,然后在需要的地方使用它。以下是代码,我正在谈论的类别控制器:

[HttpPost]
    public ActionResult Upload(HttpPostedFileBase fileData)
    {
        if (fileData != null && fileData.ContentLength > 0)
        {
            //var fileName = Server.MapPath("~/Content/Images/" + Path.GetFileName(fileData.FileName));
            int pictureCount = 800000;
            pictureCount += db.Pictures.Count();
            string extension = Path.GetExtension(fileData.FileName);
            string renamedImage = Server.MapPath("~/Content/Images/Categories/cat" + pictureCount + extension);
            fileData.SaveAs(renamedImage);
            return Json("/Content/Images/Categories/" + Path.GetFileName(renamedImage));
        }
        return Json(false);
    }
    [HttpPost]
    public ActionResult Remove(string fileName)
    {
        string completFileName = Server.MapPath("~" + fileName);
        System.IO.File.Delete(completFileName);
        return Json(true);
    }

处理公共功能

我认为最简单的方法是使用ActionFilterAttribute,你可以用它来装饰控制器方法。你将用你发布的代码覆盖onresultexecution方法,然后将你的动作方法的签名更改为如下所示:

[UploadFile]
public ActionResult Upload(string file)
{
 ....
}
[RemoveFile]
public ActionResult Remove(string file)
{
 ....
}