ASP.NET MVC3应用程序 - 带有双点的路由的HTTP错误404.7

时间:2011-09-02 17:14:27

标签: asp.net-mvc

路由:

        context.MapRoute(
            "Dashboard_default",
            "Dashboard/{controller}/{action}/{jobName}",
            new { action = "Index", controller = "Dashboard", jobName = UrlParameter.Optional }
        );

但是对于Route

http://localhost/candidate/Dashboard/Overview/Show/sdfdsf.xx.dd

我接受了:

HTTP错误404.7 - 未找到 请求过滤模块配置为拒绝文件扩展名。

同时,路线

http://localhost/candidate/Dashboard/Overview/Show/sdfdsf.xx

给予正确回应。

我认为IIS有些问题,以前有人见过吗?

4 个答案:

答案 0 :(得分:5)

要在您的web.config中允许该特定网址,您可以添加以下内容:

<system.webServer>
    <security>
      <requestFiltering>
        <fileExtensions>
          <remove fileExtension=".dd" />
        </fileExtensions>
      </requestFiltering>
    </security>
  </system.webServer>

否则,您可以在fileExtensions中添加<clear />以允许路由任何文件。

答案 1 :(得分:0)

如果您使用的是.Net 4.0,请在web.config的system.web部分中进行说明:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

此处有更多解释: http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

更多信息: http://weblogs.asp.net/carldacosta/archive/2010/04/24/tweaking-a-few-url-validation-settings-on-asp-net-v4-0.aspx

据我了解,点在路由定义中被视为文字。

http://haacked.com/archive/2008/04/10/upcoming-changes-in-routing.aspx

答案 2 :(得分:0)

您需要在最后一个参数上捕获所有路由才能正常工作。

context.MapRoute(
            "Dashboard_default",
            "candidate/Dashboard/{controller}/{action}/{*jobName}",
            new { action = "Index", 
                            controller = "Overview", 
                            jobName = UrlParameter.Optional}
        );

答案 3 :(得分:0)

.dd扩展名是IIS中默认的拒绝文件扩展名之一。您可以转到inetmgr - &gt;删除它。网站 - &gt;申请(候选人) - &gt;请求过滤(在IIS部分中) - &gt;在File Name Extensions选项卡下找到.dd并将其删除。

修改

描述的操作会自动将下一部分添加到web.config(我看到有人这样做并将其作为新答案发布):

<system.webServer>
    <security>
        <requestFiltering>
            <fileExtensions>
                <remove fileExtension=".dd" />
            </fileExtensions>
        </requestFiltering>
    </security>
</system.webServer>