asp.net MVC5 c#特定的上载限制由动作/控制器
本文关键字:控制器 上载 MVC5 net asp | 更新日期: 2023-09-27 17:50:02
英语不是我的第一语言,但我会尽我所能…
我花了一个多小时来弄清楚如何在web中应用maxRequestLength。
为特定视图配置meany route…这是我的路线:
/{Controller}/{Action}/{id}
/{CategoryId}/{Controller}/{Action}/{id}
我想允许上传200Mb的只有特定的操作/视图,而不是在所有的应用程序。有些时候,同一个视图有不同的url,比如视图Item可以被AddItem和EditItem调用。
i was hopping我可以设置这个使用属性,像[AllowUpload(200)]所以我试过了,但这个设置是在MVC属性之前评估的。
我想做的是在网络上设置最大值。配置并注册一个过滤器属性来拒绝自定义属性中的操作。控制器看起来像这样:
[AllowUpload(1)]
public class MyController : Controller
{
public ActionResult Index()
{return View();}
[AllowUpload(200)]
public ActionResult Upload()
{return View();}
}
我不知道如何做这个属性,以及控制器属性将如何被action属性覆盖。
我能想象的最好的方式是属性,因为我将有不同的上传权对任何可以有不同动作的视图,但如果你有一个想法,一个插件或其他任何东西,请告诉我。
非常感谢你
我终于知道该怎么做了。
我在webconfig上设置最大值,并为每个控制器添加一个ActionFilterAttribute。
我唯一需要确定的是总是检查ModelState。
属性代码如下:
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = false)]
public sealed class UploadActionAttribute : ActionFilterAttribute
{
public UploadActionAttribute(double maxMb = 4d)
{
MaxMb = maxMb;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (ConvertBytesToMegabytes(filterContext.HttpContext.Request.ContentLength) > MaxMb)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new JsonResult() { Data = new { Success = false, MaxContentLengthExceeded = true } };
}
else
filterContext.Controller.ViewData.ModelState.AddModelError("", string.Format(CSRess.MaxRequestLengh, MaxMb));
}
base.OnActionExecuting(filterContext);
}
private double MaxMb { get; set; }
static double ConvertBytesToMegabytes(long bytes)
{
return (bytes / 1024f) / 1024f;
}
}