仅在特定参数时匹配路线

时间:2013-05-08 16:46:02

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在尝试创建一个仅在URL中使用特定参数时才匹配的路由。

例如:

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

我希望网址与http://www.domain.com/Go/Web?=111222

匹配

但不适用于http://www.domain.com/Go/Advertising

如何通过这种方式更改路线?

3 个答案:

答案 0 :(得分:3)

您需要在路线中将网址的那一部分设为静态:

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 }
                );

答案 1 :(得分: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();
    }

    ...
}

答案 2 :(得分: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这样你就可以检查xkey的值,如果它等于111222,那就做点什么