放在默认情况下,ASP.NET MVC坏了吗?(Is PUT broken by default i

2019-10-21 21:08发布

创建了一个新的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和发现从IIS StaticFile处理程序,PUT返回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. 是否有一个原因PUT适合残疾人ExtensionlessUrlHandler默认?

(以防万一:我在Windows 8.1中的企业,VS 2013,IIS 8)。


UPD:如果你打勾WebApi创建项目时,VS将增加ExtensionlessUrlHandler配置的一部分。 所以,我想它的安全使用

Answer 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删除,但我认为以上就足够了。



文章来源: Is PUT broken by default in ASP.NET MVC?