Asp.net mvc 4 单级MVC路由
我需要构建一个控制器操作来处理此模式: example.com/aString 其中,aString可以是一组任意字符串中的任意一个。控制器将循环遍历每个可能的值,如果没有匹配,则重定向到404 我认为这只是一个重新编码的问题,但到目前为止我还是一片空白。目前正在使用谢尔维尼夫的建议:Asp.net mvc 4 单级MVC路由,asp.net-mvc-4,mvcroutehandler,Asp.net Mvc 4,Mvcroutehandler,我需要构建一个控制器操作来处理此模式: example.com/aString 其中,aString可以是一组任意字符串中的任意一个。控制器将循环遍历每个可能的值,如果没有匹配,则重定向到404 我认为这只是一个重新编码的问题,但到目前为止我还是一片空白。目前正在使用谢尔维尼夫的建议: //Catchall affiliate shortcuts. routes.MapRoute( name: "affLanding", url: "{query}", defaults: ne
//Catchall affiliate shortcuts.
routes.MapRoute(
name: "affLanding",
url: "{query}",
defaults: new
{
controller = "Home",
action = "MatchString"
}
);
控制器:
public ActionResult MatchString(string query)
{
_logger.Info("affLanding: " + query);
return View();
}
如果我将我的“搜索”字符串硬编码到route.config中,事情就会发生:
routes.MapRoute(
name: "search",
url: "aString",
defaults: new { controller = "home", action = "MatchString"}
);
在routeconfig中
routes.MapRoute(
name: "Controller1",
url: "Controller1/{action}/{id}",
defaults: new { controller = "Controller1", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Controller2",
url: "Controller2/{action}/{id}",
defaults: new { controller = "Controller2", action = "Index", id = UrlParameter.Optional }
);
//Other controllers
routes.MapRoute(
name: "search",
url: "{query}",
defaults: new
{
controller = "Home",
action = "MatchString"
}
);
routes.MapRoute(
name: "Default",
url: "",
defaults: new
{
controller = "Home",
action = "Index"
}
);
在控制器中
public ActionResult Index()
{
reutrn view();
}
public ActionResult MatchString(string query)
{
if(Your Condition)
{
//when string query doesnt find
throw new HttpException(404, "Some description");
}
else
{
return view(Your model);
}
}
记住添加所有控制器的名称,因为如果在route config中没有提到它们,服务器将如何知道它是否是搜索参数。
希望有帮助谢谢,但是alas产生了一个运行时错误:在名为“bar”的控制器上名为“foo”的操作上,路由模板“/{query}”不能以正斜杠开头。@请查看新答案。我发现解决方案很重视这项工作,但仍然得到:Description:HTTP404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL,并确保其拼写正确。@justSteve我刚刚再次检查了它。它正在工作。收到后的URL是什么?没有发现错误?是否遵循路由配置的优先级?它必须与我的相同