2011-05-19 73 views
2

我目前有一个问题运行通过VS2010和卡西尼Jessica应用程序。下面的代码是我正在运行的,但是当我尝试使用PUT或DELETE动词时,我得到了405方法不允许的响应。我试过在ASP.NET MVC got 405 error on HTTP DELETE request?上建议的答案,但这对我并不适用。我也抄在我很小的web.config卡西尼和IISExpress PUT /删除动词导致405 Http代码

<?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"); 
     }); 
    } 
} 
+0

你可能会发现,该信息将intresting以及^ h ttp://ravendb.net/faq/405-method-not-allowed – 2011-05-24 08:23:03

+0

是的,这是我在上面链接的问题的建议答案。它没有工作 – 2011-05-29 18:43:05

回答

2

我敢肯定它一直都是这样的,ASP.NET开发服务器也有其局限性。我建议通过Platform Web Installer获取VS2010 SP1和IIS Express组件。它会给你相同的开发经验,而不会产生卡西尼的怪癖。

+0

不用IIS Express的问题。方法不允许。 – 2011-05-19 13:57:12

+0

'这不仅仅是默认映射只允许GET和POST? – 2011-05-19 18:25:41

+0

我无法让WebDAV在标准2008服务器上运行。尝试了SO和服务器故障的每一个帖子。 – FlavorScape 2012-07-06 22:26:03

0

把动词应该与IIS Express一起使用,为此,您需要启用WebDAV(IIS Express安装WebDAV,但默认不启用它)。而且WebDAV也不适用于匿名身份验证。所以您需要启用WebDAV,禁用匿名身份验证并启用Windows身份验证。按照下面的步骤;

1.Find继位于用户配置文件ApplicationHost.config文件三个条目(%USERPROFILE%\文件\ iisexpress \ 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.Restart IIS快递

4.Now尝试PUT/DELETE请求

+0

该主题的快速谷歌显示,不应该使用WebDAV,并且实际上造成麻烦,我会反对它的建议。这可能是一个简单的配置问题,必须完成才能默认允许更多的http动词。 – 2011-05-19 18:29:54

+0

为什么不应该使用WebDAV?你能分享哪些建议不使用它的链接吗?我相信没有默认处理程序在IIS中的PUT动词! – vikomall 2011-05-19 23:13:38

+0

看到这个线程http://forums.iis.net/t/1166025.aspx和这一个http://forums.iis.net/t/1163441.aspx他们明确进入细节如何WebDAV是罪魁祸首 – 2011-05-20 05:58:14