Match Route Only if specific Parameter

本文关键字:specific Parameter if Only Route Match | 更新日期: 2023-09-27 18:12:35

我试图创建一个路由,只有在URL中使用特定参数时才匹配。

例如:

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

我如何改变我的路线以这种方式工作?

Match Route Only if specific Parameter

你需要在你的路由中把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 }
                );

像这样

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,然后做一些

您应该能够这样做:

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