Cassini 和 IISExpress PUT/DELETE 动词导致 405 Http 代码
Posted
技术标签:
【中文标题】Cassini 和 IISExpress PUT/DELETE 动词导致 405 Http 代码【英文标题】:Cassini and IISExpress PUT/DELETE Verbs cause 405 Http Code 【发布时间】:2011-08-28 19:39:06 【问题描述】:我目前在通过 VS2010 和 Cassini 运行 Jessica 应用程序时遇到问题。下面的代码是我正在运行的代码,但是当我尝试使用 PUT 或 DELETE 动词时,我得到一个 405 Method Not Allowed 响应。我尝试了ASP.NET MVC got 405 error on HTTP DELETE request? 建议的答案,但这对我不起作用。我还复制了我的最小 web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
代码
public class UserModule : JessModule
public UserModule() : base("/user")
Get("/", r => View("list", UserRepository.GetAllUsers()));
Post("/", r =>
AddUser(new User EmailAddress = r.EmailAddress, Name = r.Name );
return Response.AsRedirect("/user");
);
Get("/edit/:id", r => View("edit", UserRepository.GetUser(int.Parse(r.id))));
Put("/:id", r =>
EditUser(r.id, new User EmailAddress = r.EmailAddress, Name = r.Name );
return Response.AsRedirect("/user");
);
Delete("/:id", r =>
DeleteUser(r.id);
return Response.AsRedirect("/user");
);
【问题讨论】:
您可能会发现这部分信息也很有趣ravendb.net/faq/405-method-not-allowed 是的,这是我上面链接的问题的建议答案。它没有工作 【参考方案1】:我很确定它一直都是这样,ASP.NET 开发服务器有其局限性。我建议通过 Platform Web Installer 获取 VS2010 SP1 和 IIS Express 组件。它将为您提供相同的开发体验,而没有 Cassini 的怪癖。
【讨论】:
不存在与 IIS Express 相同的问题。方法不允许。 不只是默认映射只允许 GET 和 POST 吗? 我无法让 WebDAV 在标准 2008 服务器上运行。尝试了关于 SO 和服务器故障的每一篇文章。【参考方案2】:Put 动词应该与 IIS Express 一起使用,为此您需要启用 WebDAV(IIS Express 安装 WebDAV,但默认情况下不启用它)。而且 WebDAV 也不适用于匿名身份验证。所以你需要启用 WebDAV,禁用匿名身份验证并启用 Windows 身份验证。请按照以下步骤操作;
1.在位于用户配置文件(%userprofile%\documents\iisexpress\config\applicationhost.config)的applicationhost.config文件中找到以下三个条目并取消注释(默认情况下它们已注释)
<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" />
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
注意:以上三个元素不在配置文件中的一处。
2.在applicationhost.config文件末尾添加如下配置项('</configuration>'
元素前)
<location path="WebSite1">
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" useKernelMode="false">
<providers>
<clear />
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
<anonymousAuthentication enabled="true" />
</authentication>
</security>
<webdav>
<authoring enabled="true" />
<authoringRules>
<add users="*" path="*" access="Read, Write, Source" />
</authoringRules>
</webdav>
</system.webServer>
</location>
注意:在上面的配置条目中,将“WebSite1”替换为您的站点名称
3.重启IIS Express
4.现在尝试 PUT/DELETE 请求
【讨论】:
对该主题的快速 google 显示不应使用 WebDAV,实际上它会造成麻烦,我建议不要使用它。这很可能是一个简单的配置问题,默认情况下允许更多 http 动词。 为什么不应该使用 WebDAV?你能分享一下建议不要使用它的链接吗?我相信 IIS 中没有用于 PUT 动词的默认处理程序! 查看此线程 forums.iis.net/t/1166025.aspx 和此线程 forums.iis.net/t/1163441.aspx 他们明确详细说明了 WebDAV 是如何成为罪魁祸首的 WebDAV 确实声称 PUT/DELETE 等...动词。如果您有任何其他模块声称这些动词,那么这将是一个问题。否则你可以使用 WebDAV。以上是关于Cassini 和 IISExpress PUT/DELETE 动词导致 405 Http 代码的主要内容,如果未能解决你的问题,请参考以下文章
IIS7 中的 ***Exception 但在 Cassini 中没有
Visual Studio 2010 WebDev WebServer (Cassini) 64 位兼容吗?
IIS 部署在 cassini 中正常工作后,PrincipalContext.ValidateCredentials 停止验证