3

私は MVC5 で新しい属性ルーティングを使用しており、アクション メソッドにおよび属性を追加することで、httpGETおよびPOSTメソッドの制約が機能するようになりました。しかし、追加すると、404 エラー ページが表示されます。http で属性ルーティングを機能させるために何をする必要があるか知っている人はいますか? 以下のコードを参照してください。[HttpGet][HttpPost][HttpPut]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=
4

1 に答える 1

4

実際の HttpPut

これは機能するはずですが、追加の動詞を許可するように ExtensionlessUrlHandler を変更する必要があります。

<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 のバグ (または実装されていない) のようです。X-HTTP-Method-Override が尊重される MVC 5.1 Alphaのナイトリー ビルドを試すことができます。

于 2013-11-06T12:21:11.883 に答える