1

私は信じられないほど簡単なものを見逃しているに違いありません。Xamarin Studio を使用して NancyFx アプリを作成しています。モジュールで PUT および DELETE HTTP メソッドを使用したいのですが、PUT または DELETE 要求を発行すると戻ってきて、HTTP 応答ヘッダー405 Method Not Allowedに表示されます。Allow: GET, POST

私のアプリは、OSX 上の Xamarin Studio の xsp4 で実行されています。この問題に対して私が確認した解決策のほとんどは、IIS で実行している場合にのみ関連します。

xsp4/Mono/Nancy で PUT と DELETE を有効にするにはどうすればよいですか? ナンシーが問題だとは思わない。これはMonoのxsp4サーバーに限定されていると確信しています。web.config ファイル (以下に掲載) に何か不足していますか?

Nancy モジュールの DELETE ハンドラは次のようになります。

Delete["/api/family/{id}"] = _ => 
{
    int rows = 0;

    using (IDbConnection con = dbFactory.Open())
        rows = con.Execute("DELETE FROM Family WHERE Id=?", new { Id = _.id });

    return Response.AsJson(rows, HttpStatusCode.OK);
};

私の web.config ファイルは非常に単純です。次のように、すべてのパスと動詞で Nancy を有効にするだけです。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <httpHandlers>
      <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
    </httpHandlers>
    <compilation>
      <assemblies>
        <add assembly="Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
        <add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </assemblies>
    </compilation>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <httpErrors existingResponse="PassThrough" />
    <handlers>
      <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
    </handlers>
  </system.webServer>
</configuration>

curl からの HTTP 会話は次のとおりです。

> PUT /api/family HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8080
> Accept: */*
> Content-Type: application/json
> Content-Length: 262
> 
* upload completely sent off: 262 out of 262 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 405 Method Not Allowed
< Date: Sun, 27 Jul 2014 21:37:46 GMT
< Server: Mono.WebServer2/0.4.0.0 Unix
< Allow: GET, POST
< X-AspNet-Version: 4.0.30319
< Content-Length: 0
< Cache-Control: private
< Content-Type: text/html
< Keep-Alive: timeout=15, max=100
* HTTP/1.0 connection set to keep alive!
< Connection: Keep-Alive
< 
* Connection #0 to host localhost left intact
4

1 に答える 1