2

IIS 7.5 で ASP.NET Web API アプリケーションを実行しています。PUT 動詞を使用して何かにアクセスしようとすると、500 エラーが発生します。

ローカル マシンで IIS Express を使用して同じコードを実行すると、期待どおりの応答が得られます。

応答があったことは注目に値する405 Method not foundので、IIS のモジュールで WebDav 参照を削除しました。

最初にプロジェクトを作成するときに Visual Studio が提供するコントローラーを使用しています。

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public HttpResponseMessage Post()
    {
        return Request.CreateResponse(HttpStatusCode.Ambiguous);
    }

    // PUT api/values/5
    [System.Web.Http.AcceptVerbs("PUT")]
    public HttpResponseMessage Put()
    {
        return Request.CreateResponse(HttpStatusCode.SeeOther);
    }

    // DELETE api/values/5
    public void Delete(int id)
    {
    }
}

(いくつかの変更があります)。POST/GET アクションを実行すると、期待どおりの応答が得られますが、PUT アクションが機能しません。

4

1 に答える 1

2

このスタックオーバーフローの質問を参照してください

基本的に、デフォルトの ExtensionlessUrlHandler は PUT および DELETE 動詞を受け入れません。それらをweb.configに追加するだけです

<system.webServer>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>
于 2013-09-20T06:26:59.863 に答える