问题1:有没有办法只为给定路由模式设置上传限制?
我不知道,因为该<location>
节点不支持动态 url。但是你可以通过使用url rewrite 模块来欺骗它。
所以让我们假设你有一个控制器处理文件上传:
public class PicturesController
{
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file, int dynamicValue)
{
...
}
}
并且您配置了一些路由以匹配此控制器:
routes.MapRoute(
"Upload",
"{dynamicvalue}/ConvertModule/Upload",
new { controller = "Pictures", action = "Upload" },
new { dynamicvalue = @"^[0-9]+$" }
);
好的,现在让我们在 web.config 中设置以下重写规则:
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="rewrite the file upload path" enabled="true">
<match url="^([0-9]+)/ConvertModule/Upload$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="pictures/upload?dynamicvalue={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
到目前为止一切顺利,现在您可以设置<location>
为pictures/upload
:
<location path="pictures/upload">
<system.web>
<!-- Limit to 200MB -->
<httpRuntime maxRequestLength="204800" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- Limit to 200MB -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
</location>
现在您可以上传到以下模式{dynamicvalue}/ConvertModule/Upload
的 url:并且 url rewrite 模块会将其重写,pictures/upload?dynamicvalue={dynamicvalue}
但<location>
标签将匹配pictures/upload
并成功应用限制:
<form action="/123/ConvertModule/Upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">OK</button>
</form>
问题2:是否可以在超过上传大小时显示自定义警告?
不,您必须将限制设置为更大的值,并在上传处理程序中检查文件大小。如果您可以在客户端(HTML5、Flash、Silverlight 等)上检查文件大小,那么就这样做以避免浪费带宽。