gpt4 book ai didi

asp.net-mvc-2 - 我的 MVC2 应用程序可以在查询字符串参数上指定路由约束吗?

转载 作者:行者123 更新时间:2023-12-04 23:09:24 25 4
gpt4 key购买 nike

我的 MVC2 应用程序使用一个组件,使后续的 AJAX 调用返回到相同的操作,这会导致服务器上的各种不必要的数据访问和处理。组件供应商建议我将这些后续请求重新路由到不同的操作。后续请求的不同之处在于它们具有特定的查询字符串,我想知道是否可以在路由表中对查询字符串进行约束。

例如,初始请求带有类似 http://localhost/document/display/1 的 URL。 .这可以由默认路由处理。我想编写一个自定义路由来处理像 http://localhost/document/display/1?vendorParam1=blah1&script=blah.js 这样的 URL。和 http://localhost/document/display/1?vendorParam2=blah2&script=blah.js通过检测 URL 中的“供应商”。

我尝试了以下操作,但它抛出了 System.ArgumentException: The route URL cannot start with a '/' or '~' character and it cannot contain a '?' character. :

routes.MapRoute(
null,
"Document/Display/{id}?{args}",
new { controller = "OtherController", action = "OtherAction" },
new RouteValueDictionary { { "args", "vendor" } });

我可以编写一个考虑查询字符串的路由吗?如果没有,您还有其他想法吗?

更新:简而言之,我可以编写路由约束,使得 http://localhost/document/display/1路由到 DocumentController.Display行动但 http://localhost/document/display/1?vendorParam1=blah1&script=blah.js路由到 VendorController.Display行动?最后,我希望任何查询字符串包含“vendor”的 URL 都被路由到 VendorController.Display行动。

我知道第一个 URL 可以由默认路由处理,但是第二个呢?有可能做到这一点吗?经过我的大量试验和错误,看起来答案是“否”。

最佳答案

QueryString 参数 可以 用于约束,尽管默认情况下不支持。 Here您可以找到一篇描述如何在 ASP.NET MVC 2 中实现此功能的文章。

因为它是荷兰语,这里是实现。添加一个“IRouteConstraint”类:

public class QueryStringConstraint : IRouteConstraint 
{
private readonly Regex _regex;

public QueryStringConstraint(string regex)
{
_regex = new Regex(regex, RegexOptions.IgnoreCase);
}

public bool Match (HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
// check whether the paramname is in the QS collection
if(httpContext.Request.QueryString.AllKeys.Contains(parameterName))
{
// validate on the given regex
return _regex.Match(httpContext.Request.QueryString[parameterName]).Success;
}
// or return false
return false;
}
}

现在您可以在您的 route 使用它:
routes.MapRoute("object-contact", 
"{aanbod}",
/* ... */,
new { pagina = new QueryStringConstraint("some|constraint") });

关于asp.net-mvc-2 - 我的 MVC2 应用程序可以在查询字符串参数上指定路由约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com