Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 单级MVC路由_Asp.net Mvc 4_Mvcroutehandler - Fatal编程技术网

Asp.net mvc 4 单级MVC路由

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

我需要构建一个控制器操作来处理此模式:

example.com/aString

其中,aString可以是一组任意字符串中的任意一个。控制器将循环遍历每个可能的值,如果没有匹配,则重定向到404

我认为这只是一个重新编码的问题,但到目前为止我还是一片空白。目前正在使用谢尔维尼夫的建议:

//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是什么?没有发现错误?是否遵循路由配置的优先级?它必须与我的相同