Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET路由-捕获带有约束的整个url_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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传递给操作。显示的匹配函数只是为了说明我遇到的问题。向我们展示
对象在方法中的外观。这很有意义!非常感谢。