我们如何在ASP.NET MVC网址中允许点?

时间:2015-11-19 11:58:26

标签: asp.net asp.net-mvc iis asp.net-mvc-5

我有一个在MVC 5中开发的网站,在库存中执行搜索,网址就像这样

http://localhost:56099/search/SQUARE

此网址有效,它会重定向到搜索控制器和索引操作,搜索查询为SQUARE并提供正确的结果。但是,如果我输入2个点作为搜索查询,它只需要我到我的根页面。网址将是这样的

http://localhost:56099/search/..
这是奇怪的,因为当传递单点或多点时同样的事情是有效的,所以我找不到任何被忽略的技术原因。

我在Web.Config中做了以下事情:

  1. <modules runAllManagedModulesForAllRequests="true">也用于在搜索查询中接受其他字符。
  2. relaxedUrlToFileSystemMapping="true"
  3. 但没有成功,我无法找到这种奇怪行为的真正原因。任何建议。

2 个答案:

答案 0 :(得分:0)

您应该在“RouteConfig.cs”文件中注册搜索路径

routes.MapRoute(
              "SearchRoute",
              "Search/{*pathinfo}",
              new { controller = "Search", action = "ActionName"});

答案 1 :(得分:0)

您遇到..的问题,因为您的案例中的..被检测为相对URL,这表示向上移动到父目录(或您的案例中的根目录),基本上剥离了所有内容到基URI中的上一个斜杠。

web.config中的UrlRoutingHandler可以为您提供帮助。

<system.webServer>    
  <handlers>      
    <add name="UrlRoutingHandler" 
         type="System.Web.Routing.UrlRoutingHandler, 
               System.Web, Version=4.0.0.0, 
               Culture=neutral, 
               PublicKeyToken=b03f5f7f11d50a3a" 
         path="/Search/*" 
         verb="GET"/>      
  </handlers>
</system.webServer>

然后,以/Search开头的每个网址都将被视为MVC网址。

你也可以尝试:

<system.webServer>
    <security>
            <requestFiltering allowDoubleEscaping="true" />
    </security>
</system.webServer>