asp.net-mvc – 主机名中没有尾部斜杠,HttpResponse.RemoveOutpu
我在这里有点腌菜.
我有一个输出相当静态的操作,直到另一个操作用于更新第一个操作的数据源.我使用HttpResponse.RemoveOutputCacheItem删除该操作的缓存输出,以便下次用户加载时刷新它. 基本上我有这样的动作: [OutputCache(Duration=86400,Location=OutputCacheLocation.Server)] public ActionResult Index() { return ... } 在我的HomeController上,另一个控制器上的另一个动作更新了前者使用的信息: public ActionResult SaveMenu(int id,Menu menu) { ... HttpResponse.RemoveOutputCacheItem(Url.Action("Index","Home")); ... } 疯狂的是,只要您要么加载URL http:// site /或http:// site / Home / Index,这就行了.当您使用URL http:// site时,它永远不会刷新. 这是为什么? 解决方法
它与OutputCacheAttribute的工作方式有关,特别是它对RouteData的依赖性不为null.相关部分是:
public override void OnResultExecuting(ResultExecutingContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } if (!filterContext.IsChildAction) { new OutputCachedPage(this._cacheSettings).ProcessRequest(HttpContext.Current); } } ResultExecutingContext filterContext派生自ControllerContext.这是ControllerContext.IsChildAction的源代码: public virtual bool IsChildAction { get { RouteData routeData = this.RouteData; if (routeData == null) { return false; } return routeData.DataTokens.ContainsKey("ParentActionViewContext"); } } 那么,为什么这与您的问题相关? 因为当你省略“/”时,你的路线与任何东西都不匹配.默认路由为“/”.这篇文章更深入地解释了这一点:http://www.58bits.com/blog/2008/09/29/ASPNet-MVC-And-Routing-Defaultaspx.aspx.编写它是为了解释为什么在ASP.NET MVC 1项目中必须使用Default.aspx文件,但原因是根植于同一个地方. 因此,基本上,RouteData为null,因此OutputCacheAttribute无法工作.您可以通过执行Michael Jasper建议并利用URL重写来解决您的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.Net MVC的LoginStatus?
- asp.net-mvc – 如果用户在int字段中放入非数字字符串,则自
- asp.net – 访问asp:从代码背后的内容
- asp.net-core – compilationOptions.emitEntryPoint是什么
- asp.net-mvc – 可以使用ASP.Net MVC Razor视图来生成格式很
- asp.net – 没有找到WebResource.axd
- asp.net mvc webapi 实用的接口加密方法
- asp.net – 基本单声道安装不会工作
- 使用RCurl getURL函数访问ASP网页时出现“Object Moved”错
- 使用ASP.NET Web API 2.1配置依赖注入