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
我如何改变我的路线以这种方式工作?
你需要在你的路由中把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
时写这样你可以检查x
或key
的值,如果它等于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();
}
...
}