只有当特定参数匹配时才匹配路由。

3

我正在尝试创建一个仅匹配特定参数的路由。例如:

routes.MapRoute(
                name: "BannerAds",
                url: "Go/{Web}",
                defaults: new { controller = "CommunicationsAlias", action = "BannerAds", web = UrlParameter.Optional }
                );

我希望URL与http://www.domain.com/Go/Web?=111222相匹配。

但不要与http://www.domain.com/Go/Advertising相匹配。

我该如何更改我的路由以实现这种方式?

3个回答

3

您需要在路由中将URL的该部分设为静态:

routes.MapRoute(
                name: "BannerAds",
                url: "Go/Web",
                defaults: new { controller = "CommunicationsAlias", action = "BannerAds" }
            );

然后将该路由放在更一般的路由之上:

routes.MapRoute(
                name: "BannerAds",
                url: "Go/{Web}",
                defaults: new { controller = "CommunicationsAlias", action = "BannerAds", web = UrlParameter.Optional }
                );

我有点困惑 - 我是把 "Go/Web" 直接放在 "Go/{Web}" 上面吗?当我尝试这样做时,“http://www.domain.com/Go/Advertising” 仍然被重定向到 BannerAds 操作。 - user547794
路由按顺序从上到下尝试。如果找到匹配项,则选择匹配的路由。因此,您希望将更具体的路由放在顶部。{Web}路由比Web更一般。 - Davin Tryon

0

你应该可以轻松地做到这一点:

routes.MapRoute(name: "BannerAds",
                url: "Go/Web",
                defaults: new { controller = "CommunicationsAlias", action = "BannerAds", web = UrlParameter.Optional });

并在控制器中手动解析查询字符串,像这样:

public ActionResult BannerAds()
{
    string idStr = Request.QueryString.ToString().Trim('='); // strip of leading '='
    int id;
    if (!int.TryParse(idStr, out id))
    {
        return HttpNotFound();
    }

    ...
}

我尝试过这样做,却得到了一个错误信息:“路由 URL 不能以 '/' 或 '~' 字符开头,也不能包含 '?' 字符。” - user547794
@user547794 请查看我的更新答案以获取更完整的解决方案。 - p.s.w.g

0

像这样

routes.MapRoute(
                name: "BannerAds",
                url: "Go/Web",
                defaults: new { controller = "CommunicationsAlias", action = "BannerAds", web = UrlParameter.Optional }
                );

如果你只想捕获

http://www.domain.com/Go/Web?x=111222

然后编写控制器来检查查询字符串

编辑

?=111222 不是一个正确的查询字符串 - 我不太明白你为什么要捕获它 - 通常有键值对,比如 ?key=111222 或者 ?x=111222 当你这样写时,你可以检查 x 或者 key 的值,如果等于 111222,则执行某些操作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接