C# ASP.NET路由-捕获带有约束的整个url
我想设置一个C# ASP.NET路由-捕获带有约束的整个url,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我想设置一个路由,它将匹配任何url,并带有一个约束。这就是我尝试过的: routes.MapRouteLowercase("CatchAll Content Validation", "{*url}", new { controller = "Content", action = "LoadContent" }, new { url = new ContentURLConstraint(), } ); 出于测试目的,我有以下简单约束: public class Content
路由
,它将匹配任何url
,并带有一个约束。这就是我尝试过的:
routes.MapRouteLowercase("CatchAll Content Validation", "{*url}",
new { controller = "Content", action = "LoadContent" },
new { url = new ContentURLConstraint(), }
);
出于测试目的,我有以下简单约束:
public class ContentURLConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var s = (string)values["url"];
return s.Contains("comm");
}
}
如果满足约束,我希望将完整url传递给controll操作LoadContent
public ActionResult LoadContent(string url)
{
return Content(url);
}
加载页面时,我希望
Match
函数中的s
包含整个url
,以便我可以检查它,但它是null
。我可能缺少什么?当路由中没有url
时,即主机本身:null
当存在url时,例如:,您的url
参数将保存一个值:one/two
可以将约束修改为以下内容:
public class ContentURLConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values routeDirection)
{
var url = values[parameterName] as string;
if (!string.IsNullOrEmpty(url))
{
return url.Contains("comm");
}
return false; // or true, depending on what you need.
}
}
我可能会错过什么
可能是缺少url约束,该约束不包含主机、端口、架构和查询字符串。如果您需要它-您可以从
httpContext.Request
获取它,但不完全清楚您想要实现什么。你能用一些例子来更新你的问题吗?我补充了一些细节。简而言之,我想根据约束检查所有传入的url,如果满足,则将完整的url传递给操作。显示的匹配函数只是为了说明我遇到的问题。向我们展示值对象在方法中的外观。这很有意义!非常感谢。