2011-05-19 71 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