ASP.NET MVC默认情况下PUT是否被破坏?

时间:2015-02-12 09:59:55

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

我创建了一个新的ASP.NET MVC项目,更新了NuGet包(到<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net451" /> )并添加了一个控制器:

public class HomeController : Controller
{
    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Put | HttpVerbs.Post)]
    public string Index()
    {
        return "bombaclat";
    }
}

我在IIS Express上运行它,发现PUT从IIS StaticFile处理程序返回404(GET和POST都可以正常工作)。

我可以通过允许ExtensionlessUrlHandler的所有动词来修复它:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

或者为每个请求运行UrlRoutingModule

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>

(因此,将RAMMFAR设置为true也会起作用)

  1. 设计是否需要使用Web.config来制作PUT 工作?
  2. 解决方案是否相同?如果不是,有什么区别,我应该如何决定使用哪一个?
  3. 默认情况下,ExtensionlessUrlHandler是否会禁用PUT?
  4. (以防万一:我在Windows 8.1 Enterprise,VS 2013,IIS 8上)。


    UPD:如果在创建项目时勾选WebApi,VS将添加ExtensionlessUrlHandler配置部分。所以,我认为使用它是安全的

1 个答案:

答案 0 :(得分:1)

我从未见过其他有关安全性的提及,但我自己和其他同事遇到的问题(通常每人一次:))是Slicksim提到的WebDAV问题

您可以在web.config中尝试此操作:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
<!--all the other webserver stuff -->
</system.webServer>

我想您也可以从IIS中完全删除WebDAV,但我认为以上就足够了。