MVC 在回发后更改路由
MVC change a route after postback
我有一个像这样返回数据的操作,
return _aPartialPopupView(model)
并且码流后,站点路由变更为
../User/_aPartialPopupView
但我想将此路线更新为
../User/
在操作调用之后,因为它应该重定向到 index 操作
我认为这是回答我的问题,但应该有更明确的挂断方式
让我们得到这样的路线。
routes.MapRoute("old", "foo/{controller}/{action}/{id}");
还有这样的方法
var new = routes.MapRoute("new", "bar/{controller}/{id}/{action}");
var old = routes.MapRoute("new", "foo/{controller}/{action}/{id}");
routes.Redirect(old).To(new);
MapRoute 方法创建路线。或者,我们可以这样做:
var new = routes.MapRoute("new", "bar/{controller}/{id}/{action}");
var throwAway = new RouteCollection();
var old = throwAway.MapRoute("new", "foo/{controller}/{action}/{id}");
routes.Redirect(old).To(new);
匹配传入请求时调用的方法 GetNewRouteData 的实现。
public override RouteData GetNewRouteData (HttpContextBase httpContext) {
// Use the original route to match
var routeData = SourceRoute.GetNewRouteData(httpContext);
if (routeData == null) {
return null;
}
// But swap its route handler with our own
routeData.RouteHandler = this;
return routeData;
}
RedirectRoute实现了IRouteHandler,所以我们应该看看它的实现。
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
var requestRouteValues = requestContext.RouteData.Values;
var routeValues = AdditionalRouteValues.Merge(requestRouteValues);
var vpd = TargetRoute.GetVirtualPath(requestContext, routeValues);
string targetUrl = null;
if (vpd != null) {
targetUrl = "~/" + vpd.VirtualPath;
return new RedirectHttpHandler(targetUrl, Permanent, isReusable: false);
}
return new DelegateHttpHandler( httpContext => httpContext.Response.StatusCode = 404, false);
}
我有一个像这样返回数据的操作,
return _aPartialPopupView(model)
并且码流后,站点路由变更为
../User/_aPartialPopupView
但我想将此路线更新为
../User/
在操作调用之后,因为它应该重定向到 index 操作
我认为这是回答我的问题,但应该有更明确的挂断方式
让我们得到这样的路线。
routes.MapRoute("old", "foo/{controller}/{action}/{id}");
还有这样的方法
var new = routes.MapRoute("new", "bar/{controller}/{id}/{action}");
var old = routes.MapRoute("new", "foo/{controller}/{action}/{id}");
routes.Redirect(old).To(new);
MapRoute 方法创建路线。或者,我们可以这样做:
var new = routes.MapRoute("new", "bar/{controller}/{id}/{action}");
var throwAway = new RouteCollection();
var old = throwAway.MapRoute("new", "foo/{controller}/{action}/{id}");
routes.Redirect(old).To(new);
匹配传入请求时调用的方法 GetNewRouteData 的实现。
public override RouteData GetNewRouteData (HttpContextBase httpContext) {
// Use the original route to match
var routeData = SourceRoute.GetNewRouteData(httpContext);
if (routeData == null) {
return null;
}
// But swap its route handler with our own
routeData.RouteHandler = this;
return routeData;
}
RedirectRoute实现了IRouteHandler,所以我们应该看看它的实现。
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
var requestRouteValues = requestContext.RouteData.Values;
var routeValues = AdditionalRouteValues.Merge(requestRouteValues);
var vpd = TargetRoute.GetVirtualPath(requestContext, routeValues);
string targetUrl = null;
if (vpd != null) {
targetUrl = "~/" + vpd.VirtualPath;
return new RedirectHttpHandler(targetUrl, Permanent, isReusable: false);
}
return new DelegateHttpHandler( httpContext => httpContext.Response.StatusCode = 404, false);
}