2013-11-04 71 views
3

路由我使用的是新的屬性與MVC5路由,並已得到了HTTP GETPOST方法限制通過增加[HttpGet][HttpPost]屬性,我的操作方法來工作。但是,當我添加[HttpPut]我只是得到一個404錯誤頁面。有誰知道我需要做什麼來獲得屬性路由使用http PUT?請參見下面的代碼:屬性與HTTP PUT方法約束

[HttpGet] 
    [Route("edit")] 
    public ActionResult Edit() { 
     // this works 
     return View(); 
    } 

    [HttpPost] 
    [Route("insert")] 
    public ActionResult Insert() { 
     // this works 
     return View(); 
    } 

    [HttpPut] 
    [Route("update")] 
    public ActionResult Update() { 
     // this does not work 
     return View(); 
    } 

我試着X-HTTP-Method-Override=PUT

POST /update HTTP/1.1 
Host: localhost:61794 
Content-Length: 32 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 

X-HTTP-Method-Override=PUT&text= 

並且還帶有一個真正的PUT

PUT /update HTTP/1.1 
Host: localhost:61794 
Content-Length: 5 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 

text= 
+1

您確定您使用的是System.Web.MVC的[HttpPut]嗎?還有System.Web.Http的[HttpPut]。 – Spock

+0

是的,我正在使用'System.Web.Mvc.HttpPutAttribute'。 – lajjne

+0

你能分享你的請求的樣子嗎?您可能可以從瀏覽器調試工具或Fiddler獲取詳細信息... –

回答

4

房地產HttpPut

這應該工作,但你必須修改擴展名sUrlHandler以允許附加的動詞:

<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> 

X-HTTP-方法-覆蓋

這似乎是在5.0的錯誤(或不只是實現)。您可以嘗試MVC 5.1 Alpha的nightly build,其中X-HTTP-Method-Override得到尊重。

+1

我剛剛更新到MVC 5.1的最終版本,[HttpPut]再次作品:) – lajjne