处理公共功能
本文关键字:功能 处理 | 更新日期: 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)
{
....
}