6

Backbone.Todosの例「Clearxcompleteditems」をクリックすると気づきました。DELETE405は許可されていません...

以前のヘルプとドキュメントから、DELETEPUTPATCHを有効にする場合は...設定する必要があることを理解しています。

X-http-method-override : DELETE

フォームまたはjqueryの場合。

しかし、backbone.jsを初めて使用するため、Backbone.Todosの例でこれがどのように行われるかはわかりません。

DELETE405の修正方法を教えてください。ありがとうございました。

編集 - - - - - - - - - - - - - - - - - - - -

ルートはいつでも変更できます...

[Route("/todos/add")] //C - post
[Route("/todos/{id}")] //R - get
[Route("/todos/{id}/edit")] //U - post
[Route("/todos/{id}/delete")] //D - post

したがって、PostとGetだけで十分です。しかし、以下と比較すると、あまり落ち着きがないように見えます。

[Route("/todos/{id}", "Delete")] //D - delete

しますか?

4

2 に答える 2

5

Backbone.jsはこれを特別にサポートしており、次の方法で有効にできます。

Backbone.emulateHTTP = true

彼らのウェブサイトから:

emulateHTTP Backbone.emulateHTTP = true

BackbonesのデフォルトのREST/HTTPアプローチをサポートしていないレガシーWebサーバーを使用する場合は、Backbone.emulateHTTPをオンにすることを選択できます。このオプションを設定すると、HTTP POSTを使用してPUTおよびDELETEリクエストが偽造され、X-HTTP-Method-Overrideヘッダーがtrueメソッドに設定されます。emulateJSONもオンになっている場合、trueメソッドは追加の_methodパラメーターとして渡されます。

Backbone.emulateHTTP = true;

model.save();  // POST to "/collection/id", with "_method=PUT" + header.

405応答は、WebDavなどのIISで実行されている他の何かが、ServiceStackに到達する前に要求をハイジャックして拒否した結果である可能性があります。それ以外の場合、クライアントで拒否されている場合は、CORSを有効にして、追加のHTTP動詞を送信できるようにすることができます。

于 2012-10-04T14:23:12.340 に答える
2

少し掘り下げた後、それがバックボーン設定ではないことに気付きました(Backbone.emulateHTTP = false;ちなみにbackbone.jsの34行目にあります)

私はフィドラーをチェックしました、そしてそれは言います:

Module  WebDAVModule
Notification  MapRequestHandler
Handler  ServiceStack.Factory
Error Code  0x00000000

神話が疑ったように、それはWebDAVのハイジャックと要求の拒否でした。次に、web.configからWebDAVを無効にする方法を見つけました。

  ...
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
    </handlers>
  </system.webServer>
  ...

今ではうまく機能しています。ありがとうございました!

于 2012-10-04T23:55:56.327 に答える