C# 带验证的MVC自定义路由
大师 在我的项目中,我指定了许多不同的路线,如下所示C# 带验证的MVC自定义路由,c#,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,大师 在我的项目中,我指定了许多不同的路线,如下所示 routes.MapRoute( name: "StudentMerit", url: "Student-Merit", defaults: new { controller = "StudentMerit", action = "GetData"}); routes.MapRoute( name: "StudentResults", url: "Student-Results", default
routes.MapRoute(
name: "StudentMerit",
url: "Student-Merit",
defaults: new { controller = "StudentMerit", action = "GetData"});
routes.MapRoute(
name: "StudentResults",
url: "Student-Results",
defaults: new { controller = "StudentResults", action = "GetData"});
正如你们所看到的,url是用连字符分隔的,我不太担心操作名
如果我能告诉MVC,所有这些路由都可以被重写,它可以将连字符替换为空
URL,它将是我的控制器
大概
routes.MapRoute(
name: "AllInOne",
url: "{Cont-roller}",
defaults: new { controller = {Cont-roller}.replace("-",""), action = "GetData"});
有没有办法做到这一点?
请帮忙
提前感谢。创建您自己的RouteHandler。我不知道这是否是最好的解决方案
public class RemoveDashRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = ((string)requestContext.RouteData.Values["controller"]).Replace("-", String.Empty);
return base.GetHttpHandler(requestContext);
}
}
用法
编辑备选解决方案
我发现了一个更好的解决方案(在我看来),将Route分为子类,然后覆盖GetRouteData。这样更好,因为Route的职责是生成RoutedData,而MvcRouteHandler的职责是获取IHttpHandler
public class RemoveDashRoute : Route
{
private const string ControllerKey = "controller";
public RemoveDashRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints = null, RouteValueDictionary dataTokens = null, IRouteHandler routeHandler = null)
: base(url, defaults, constraints ?? new RouteValueDictionary(), dataTokens ?? new RouteValueDictionary(), routeHandler ?? new MvcRouteHandler())
{
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var routeData = base.GetRouteData(httpContext);
if (routeData != null && routeData.Values.ContainsKey(ControllerKey))
{
routeData.Values[ControllerKey] = ((string)routeData.Values[ControllerKey]).Replace("-", String.Empty);
}
return routeData;
}
}
用法
创建自己的RouteHandler。我不知道这是否是最好的解决方案
public class RemoveDashRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = ((string)requestContext.RouteData.Values["controller"]).Replace("-", String.Empty);
return base.GetHttpHandler(requestContext);
}
}
用法
编辑备选解决方案
我发现了一个更好的解决方案(在我看来),将Route分为子类,然后覆盖GetRouteData。这样更好,因为Route的职责是生成RoutedData,而MvcRouteHandler的职责是获取IHttpHandler
public class RemoveDashRoute : Route
{
private const string ControllerKey = "controller";
public RemoveDashRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints = null, RouteValueDictionary dataTokens = null, IRouteHandler routeHandler = null)
: base(url, defaults, constraints ?? new RouteValueDictionary(), dataTokens ?? new RouteValueDictionary(), routeHandler ?? new MvcRouteHandler())
{
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var routeData = base.GetRouteData(httpContext);
if (routeData != null && routeData.Values.ContainsKey(ControllerKey))
{
routeData.Values[ControllerKey] = ((string)routeData.Values[ControllerKey]).Replace("-", String.Empty);
}
return routeData;
}
}
用法
你的意思可能是
移除ashroutehandler
。是的。。第二种选择似乎更好!!你的意思可能是移除ashroutehandler
。是的。。第二种选择似乎更好!!